Увеличьте время сессии php - PullRequest
13 голосов
/ 08 марта 2011

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

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

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

Однако, похоже, он имеет только сеансвремя 1 час.

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

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

Ответы [ 5 ]

10 голосов
/ 08 октября 2015

Сценарий

Вы используете 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();
3 голосов
/ 08 марта 2011

Вам также нужно изменить еще пару переменных в вашем php.ini

См. Параметры http://prajapatinilesh.wordpress.com/2009/01/14/manually-set-php-session-timeout-php-session/.

0 голосов
/ 07 июля 2015

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

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

Source: http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

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

0 голосов
/ 24 октября 2013

Попробуйте подписаться-

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

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

или

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

ini_set ('session.gc_maxlifetime', 21600);

0 голосов
/ 16 января 2012

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

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]); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...