Тайм-аут сеанса в php

Я установил время таймаута сеанса в течение 20 минут, как показано ниже. Иногда таймаут сеанса происходит через две или три минуты.

ini_set('session.gc_maxlifetime', 1200); ini_set('session.cookie_lifetime', 1200); ini_set('session.gc_probability', 1); ini_set('session.gc_divisor', 100); 

В чем может быть проблема?

Solutions Collecting From Web of "Тайм-аут сеанса в php"

20-минутное истечение не сбрасывается, когда пользователь просматривает другие страницы. Проблема объясняется в этом комментарии :

Поскольку PHP Session Session Control не правильно обрабатывает сеансовые сеансы при использовании session_set_cookie_params (), нам нужно что-то сделать, чтобы изменить время истечения сеанса каждый раз, когда пользователь посещает наш сайт. Итак, вот в чем проблема.

 $lifetime=600; session_set_cookie_params($lifetime); session_start(); 

Этот код не изменяет время жизни сеанса, когда пользователь возвращается на наш сайт или обновляет страницу. Сессия истечет после $ секунд жизни, независимо от того, сколько раз пользователь запрашивает страницу. Поэтому мы просто перезаписываем файл cookie сеанса следующим образом:

 $lifetime=600; session_start(); setcookie(session_name(),session_id(),time()+$lifetime); 

И теперь у нас есть тот же самый cookie сеанса, при котором время жизни устанавливается на правильное значение.

Лучше оставить session.cookie_lifetime 0 чтобы файл cookie истекал при закрытии браузера. В противном случае пользователи, которые предполагают, что закрытие браузера завершат их сессию, будут удивлены, когда они снова откроют свой браузер до 20-минутного таймаута.

Изменить настройки gc_xxxx

gc_probability = 1, gc_divisor = 1, gc_maxlifetime = 1200

1/1 подразумевает, что PHP будет проверять дату сеансовых файлов для каждого вызова session_start .

gc_probability = 1, gc_divisor = 100, gc_maxlifetime = 1200

1/100 означает, что PHP будет проверять дату сессионных файлов случайным образом, но примерно один раз на 100 вызовов session_start .

Сама проверка даты состоит в сравнении времени доступа к файлам сеанса с gc_maxlifetime; он удаляет файл, если в прошлом не было доступа (например, 20 минут).

Сказав, что, если файл cookie истекает из-за таймаута (или закрытия браузера, когда тайм-аут равен 0), сеанс истекает немедленно, так как браузер прекращает отправку файла cookie с истекшим сеансом; в этом случае PHP выдает новый куки-файл id сеанса. Файл идентификатора сеанса, связанный с истекшим файлом cookie, становится заброшенным, больше не открывается; поэтому мусор собирается в любое время, как описано выше.

Наконец, ваша конкретная проблема может быть решена (i), посмотрев дату истечения срока действия cookie id (ы) сессии и помня, что файлы cookie с тайм-аутом не обновляются при посещении / обновлении страницы.