Эта проблема:
У меня есть веб-сайт, который использует сессии 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 минуты.
В соответствии с вашими последующими комментариями ваши настройки для 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
, Установка их слишком агрессивно вызовет частую сборку мусора. Это может повредить производительности, но не приведет к преждевременному истечению срока действия данных. С другой стороны, слишком слабые значения будут по-прежнему предоставлять доступ к устаревшим данным.
Других решений пока нет …