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

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

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

Моя среда:

Версия php: 7.1

Сервер: NGINX

Framework: CakePHP 3.5

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

Я выполнил каждое решение по StackOverflow или по результатам поиска. Я увеличил время ожидания сессии как в 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 минуты.

5

Решение

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

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

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

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

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


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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]