$ _SESSION superglobal неожиданно опорожняется - PullRequest
1 голос
/ 21 апреля 2020

Я использую сеансы в попытке реализовать постоянные входы в систему для моих пользователей в веб-приложении. Серверная часть - php 7,2 и apache, предоставляемая через общий хостинг Namecheap.

Я устанавливаю сессионный повар ie на клиенте с "cookie_lifetime" и "gc_maxlifetime" 604 800 секунд (одна неделя). Сервер вызывает session_start() с этими параметрами и проверяет ключ $_SESSION с именем «user_id», чтобы узнать, начал ли вызов session_start() существующий сеанс (если ключ определен, пользователь «вошел в систему»). Это происходит каждый раз, когда страница загружается. Все работает нормально, пока не прошло около 40 минут бездействия, затем следующая страница refre sh и попытка вызвать session_start() и получить доступ к любым $_SESSION ключам возвращают неопределенное значение для всех, несмотря на то, что сеанс cook ie все еще показывает Значение «Expires» через несколько дней в DevTools.

Насколько я понимаю, «cookie_lifetime», «gc_maxlifetime» и связанный с ним заголовок «Expires» для установки клиентской функции cook ie сохранят сеанс информация, по крайней мере, в течение указанного времени, но это взаимодействие демонстрирует, что независимо от того, что я поместил в эти поля, суперглобальный $_SESSION не вернет ничего значимого за ~ ~ 40 минут бездействия.

утра Я не правильно понимаю это, или, возможно, что-то не так с точки зрения конфигурации сервера, которая выходит за рамки кода приложения клиент-сервер?

1 Ответ

0 голосов
/ 23 апреля 2020

Я не до конца понял, почему это происходит. Однако я связался со службой поддержки Namecheap, и они сказали мне, что их сессии не работали так же, как через 40 минут; они продолжали видеть значения сеанса, которые были установлены несколькими часами ранее, когда они пытались воссоздать проблему, используя тот же код и конфигурацию, что и я.

Я копался в конфигурации сервера и просматривал вывод phpinfo() dump и определил, что Registered save handlers было установлено на files user. Я не могу выяснить, что отражает компонент user, и, возможно, именно в этом заключается проблема, но я смог решить проблему, явно указав параметр session.save_path вместо того, чтобы полагаться на значение по умолчанию (которое было no value в выводе phpinfo).

Сотрудники службы поддержки сказали, что по умолчанию было /home/[user]/tmp/, и их сеансы отображались там, а мои - нет. После добавления явного save_path к php .ini мои сеансы стали появляться там, и истек срок действия ~ 40 минут.

Я не буду принимать это как ответ, если кто-то еще может дать больше понимания / понимания, но я хотел бы, по крайней мере, сказать, что нашел решение своей проблемы. Я не уверен, что происходило раньше, но я не мог найти мои файлы сессий где-либо разумно в каталогах моей учетной записи пользователя общего хоста, и мне интересно, были ли они там вообще. Мне также очень странно, что это помогло персоналу службы поддержки, но не мне или другу, которые я проверил на своем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...