Сценарий
Вы используете Debian Linux или Ubuntu Linux.Вы хотите, чтобы сеансы PHP длились дольше, чем стандартные 1440 секунд (24 минуты).Итак, вы делаете это:
ini_set('session.gc_maxlifetime', 10800); # 3 hours
С этим параметром сеансы должны оставаться активными не менее трех часов, пока пользователи не закрывают свой браузер.1
Но неважно, чтовы делаете, сеансы удаляются через 24–54 минуты.Похоже, PHP игнорирует настройку gc_maxlifetime.
Почему это происходит
Debian и Ubuntu Linux переопределяют поведение сессии PHP.Если вы посмотрите внимательно, вы увидите, что session.gc_probability имеет значение 0, что означает, что сборка мусора в PHP никогда не запустится.Вместо этого в /etc/cron.d/php5 есть задание для cron, специфичное для Debian, которое выполняется каждые 30 минут!
Задание cron выполняет сборку мусора на основе глобального session.gc_maxlifetime в php.ini.Session.gc_maxlifetime в вашем приложении игнорируется.
Решение
Хотя вы можете отключить работу cron и / или изменить php.ini, я бы предпочелустранить проблему без изменения системных настроек по умолчанию.Лучшее решение - создать свой собственный каталог сессий где-то за пределами обычного, а затем локально включить сборщик мусора сессий PHP.
Для этого , set session.gc_maxlifetime, session.gc_probability, session.gc_divisor, and session.save_path
:
# Session lifetime of 3 hours
ini_set('session.gc_maxlifetime', 10800);
# Enable session garbage collection with a 1% chance of
# running on each session_start()
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
# Our own session save path; it must be outside the
# default system save path so Debian's cron job doesn't
# try to clean it up. The web server daemon must have
# read/write permissions to this directory.
session_save_path(APP_PARENT_DIR . '/sessions');
# Start the session
session_start();