session.gc_maxlifetime не работает для меня - PullRequest
0 голосов
/ 14 января 2010

я хочу установить ограничение времени ожидания сеанса на 3 минуты,

Я использовал это на странице

ini_set ("session.gc_maxlifetime", "50"); не работает

Решение для этого

if (isset ($ _ SESSION ['LAST_ACTIVITY']) && (время () - $ _SESSION ['LAST_ACTIVITY']> 1800)) { // последний запрос был более 30 минут назад session_destroy (); // уничтожаем данные сессии в хранилище session_unset (); // сбросить переменную $ _SESSION для среды выполнения} $ _SESSION ['LAST_ACTIVITY'] = время (); // обновляем отметку времени последней активности

Ответы [ 3 ]

7 голосов
/ 21 января 2016

Три переменные используются для определения поведения сборки мусора переменных сеанса PHP:

  1. session.gc_maxlifetime - время жизни в секундах для сеанса файлы (значение по умолчанию: 1440 = 24 минуты)
  2. session.gc_probability is Номинатор вероятности казни сборщика мусора (по умолчанию = 1)
  3. session.gc_divisor - знаменатель для вероятность выполнения сборщика мусора (по умолчанию = 100 или 1000)

Знаменатель и знаменатель используются вместе для определения вероятности (знаменатель / знаменатель). Таким образом, когда session.gc_probability равен 1 и session.gc_divisor 100, это 1/100 = 1%. Таким образом, 1% каждого посещения страницы (= каждый вызов session_start) выполняется сборщиком мусора.

Если вы хотите проверить, как истекает срок вашей сессии, вам нужно установить для session.gc_probability and session.gc_divisor значение 1, чтобы при каждом посещении страницы запускался сборщик мусора. Кроме того, вам нужно использовать два разных браузера для теста. Сеанс первого браузера очищается, когда вы посещаете страницу со вторым браузером (и время сеанса первого браузера истекло). В моих тестах, когда вы используете только один браузер, сеанс автоматически продлевается, хотя и устарел.

2 голосов
/ 14 января 2010

Сессия будет жить до тех пор, пока файл остается в файловой системе сервера. Их вычищает сборщик мусора. Сборщик мусора запускается примерно на каждой сотне загрузок страниц на сервере (это довольно случайно, загрузка «каждой сотни» страниц - это просто среднее значение).

Кроме того, возраст сессии неактивен возраст, а не общий возраст. Таймер сбрасывается для этого сеанса каждый раз, когда пользователь делает запрос.

2 голосов
/ 14 января 2010

Единица для значения session.gc_maxlifetime составляет секунды. Поэтому вам нужно установить значение 180 секунд, чтобы выразить 3 минуты.

Но, кроме того, session.gc_maxlifetime не является надежным (см. этот пост для объяснения). Вы должны лучше реализовать это самостоятельно, чтобы срок действия сеанса истек ровно через 3 минуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...