Увеличение времени сеанса php

Я пытаюсь увеличить время сеанса php до 6 часов.

Вот код, чтобы увеличить время сеанса:

ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours 

Однако, похоже, ТОЛЬКО имеет время сеанса 1 час.

Приветствуется любое предложение.

Также, как проверить эту функцию, не дожидаясь 6 часов, чтобы узнать, не истечет ли мой сеанс.

Ответ 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();

Ответ 3

Увеличение session.gc_maxlifetime через ini_set может не работать, если выполняется еще один script (например, другой vhost), который использует тот же самый сеанс. save_path. Другой script удаляет сеансы всех скриптов по собственному времени жизни:

Примечание:
Если разные скрипты имеют разные значения session.gc_maxlifetime, но используют одно и то же место для хранения данных сеанса, тогда script с минимальным значением будет очищать данные. В этом случае используйте эту директиву вместе с session.save_path.

Источник: http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

Также не забудьте изменить настройку перед session_start(). Если у вас включен session.auto_start, то это будет поздно, если вы используете ini_set.

Ответ 4

Попробуйте следующее -

  • Избегать пробелов

ini_set ('session.gc_maxlifetime', 60 * 60 * 6);

Или

  • просто введите значения в секундах как...

ini_set ('session.gc_maxlifetime', 21600);

Ответ 5

используйте этот

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]);