PHP сборщик мусора удаляет мои сессии

Эта проблема:

У меня есть веб-сайт, который использует сессии PHP, чтобы позволить пользователям войти в систему. Он работает нормально. Но сеанс истекает слишком рано, чтобы 1 минута бездействия вышла из системы пользователя.

Моя среда:

Версия php: 7.1

Сервер: NGINX

Framework: CakePHP 3.5

Что я сделал до сих пор?

Я выполнил каждое решение по Stackru или по результатам поиска. Я увеличил время ожидания сессии как в php.ini, так и в конфигурациях CakePHP.

Решение

После 2 или 3 дней исследований я нашел решение. В моем php.ini я нашел конфигурацию с именем session.gc_probability и я оценил 0 для этого. Теперь мои сеансы никогда не истекают, кроме случаев, когда пользователь намеренно выходит из системы.

И сейчас моя проблема в том, что я не хочу session.gc_probability Конфигурация должна быть нулевой, так как она не будет собирать мусор (Не совсем уверен в этом. Пожалуйста, исправьте меня, если эта информация неверна.). И это приведет к тому, что сеансы останутся на месяц или годы, которые являются настоящим ГАРАНТИЕМ для сервера.

У меня появилась идея дать session.gc_probability нулевое значение отсюда

session.gc_divisor coupled with session.gc_probability defines the 
probability that the gc (garbage collection) process is started on 
every session initialization. The probability is calculated by using 
gc_probability/gc_divisor, e.g. 1/100 means there is a 1% chance that 
the GC process starts on each request. session.gc_divisor defaults to 
100.

Что именно не так с моими конфигурациями? Что заставляет сборщик мусора удалять мои сессии так скоро? session.gc_probability был 1 и session.gc_divisor было 1000. Я думаю, что процесс с вероятностью 1/1000 не должен запускаться каждые 1 или 2 минуты.

1 ответ

Решение

В соответствии с вашими последующими комментариями ваши настройки для Session.handler является php, Документация сессий объясняет:

Встроенные конфигурации:

  • php - Сохраняет сессии со стандартными настройками в вашем файле php.ini.
  • cake - Сохраняет сессии в виде файлов внутри tmp/sessions, Это хороший вариант, когда на хостах не разрешено писать за пределами своей домашней директории.

[...]

Настройка php.ini по умолчанию для session.save_path зависит от вашего дистрибутива PHP (и его можно изменить в любом случае), но обычно включает в себя общее хранилище данных для всех приложений PHP, которые не отказываются. Это означает, что приложение с самым коротким временем сеанса.gc_maxlife может удалить данные сеанса из других приложений.

Переключение на cake следует рассмотреть это.


Небольшое продолжение о session.gc_probability а также session.gc_divisor , Установка их слишком агрессивно вызовет частую сборку мусора. Это может повредить производительности, но не приведет к преждевременному истечению срока действия данных. С другой стороны, слишком слабые значения будут по-прежнему предоставлять доступ к устаревшим данным.

Другие вопросы по тегам