Я пытаюсь увеличить время сеанса php до 6 часов.
Вот код для увеличения времени сеанса:
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours
Однако, похоже, ТОЛЬКО имеет время сеанса 1 час.
Любое предложение очень ценится.
Кроме того, как проверить эту функцию, не дожидаясь 6 часов, чтобы узнать, не истекает ли время сеанса.
Сценарий
Вы используете Debian Linux или Ubuntu Linux. Вы хотите, чтобы сеансы PHP длились дольше 1440 секунд (24 минуты). Итак, вы делаете это:
ini_set('session.gc_maxlifetime', 10800); # 3 hours
В этом случае сеансы должны оставаться активными не менее трех часов, если пользователи не закрывают браузер.
Но независимо от того, что вы делаете, сеансы продолжают удаляться через 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();
Вам также нужно изменить еще пару переменных в php.ini
См. http://prajapatinilesh.wordpress.com/2009/01/14/manually-set-php-session-timeout-php-session/ для параметров.
Увеличение session.gc_maxlifetime через ini_set может не работать, если выполняется другой скрипт (например, другой vhost), который использует один и тот же session.save_path. Другой скрипт удаляет сеансы всех скриптов по собственному времени жизни:
Заметка:
Если разные скрипты имеют разные значения session.gc_maxlifetime, но используют одно и то же место для хранения данных сеанса, тогда скрипт с минимальным значением будет очищать данные. В этом случае используйте эту директиву вместе с session.save_path.
Источник: http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime
Также не забудьте изменить настройку перед session_start (). Если у вас включен session.auto_start, то в конце, когда вы используете ini_set.
Попробуйте следующее-
ini_set ('session.gc_maxlifetime', 60 * 60 * 6);
Или
ini_set ('session.gc_maxlifetime', 21600);
использовать это
ini_set('session.gc_maxlifetime', 6 * 60 * 60); // 6 Hours instead to this ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 1 Hours ini_set('session.gc_maxlifetime', [hours] * [minutes] * [seconds]);