PHP сборщик мусора удаляет мои сессии - PullRequest
0 голосов
/ 25 мая 2018

Проблема:

У меня есть веб-сайт, который использует сеансы 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 была равна нулю, поскольку она не будетсобрать мусор (Не совсем уверен в этом. Пожалуйста, исправьте меня, если эта информация неверна.).И это приведет к тому, что сессии останутся на месяц или годы, которые являются настоящим GARBAGE для сервера.

У меня появилась идея дать 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 Ответ

0 голосов
/ 25 мая 2018

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

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

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

[…]

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

Переключение на cake должно решить эту проблему.


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

...