Ответ 1
Сценарий
Вы используете 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 никогда не будет выполняться. Вместо этого, задание cron, заданное Debian, выполняется в /etc/cron.d/php5, которое запускается каждые 30 минут!
Задача cron выполняет сбор мусора на основе глобального session.gc_maxlifetime в php.ini. Session.gc_maxlifetime в вашем приложении игнорируется.
Решение
В то время как вы можете отключить задание cron и/или изменить php.ini, Id предпочитает исправлять проблему без изменения системных значений по умолчанию. Лучшее решение - создать свой собственный каталог сеансов, где-то вне нормального, а затем локально включить сборку мусора сессии 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 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();