Я установил время таймаута сеанса в течение 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);
В чем может быть проблема?
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-минутного таймаута.
1/1
подразумевает, что PHP будет проверять дату сеансовых файлов для каждого вызова session_start
.
1/100
означает, что PHP будет проверять дату сессионных файлов случайным образом, но примерно один раз на 100 вызовов session_start
.
Сама проверка даты состоит в сравнении времени доступа к файлам сеанса с gc_maxlifetime; он удаляет файл, если в прошлом не было доступа (например, 20 минут).
Сказав, что, если файл cookie истекает из-за таймаута (или закрытия браузера, когда тайм-аут равен 0), сеанс истекает немедленно, так как браузер прекращает отправку файла cookie с истекшим сеансом; в этом случае PHP выдает новый куки-файл id сеанса. Файл идентификатора сеанса, связанный с истекшим файлом cookie, становится заброшенным, больше не открывается; поэтому мусор собирается в любое время, как описано выше.
Наконец, ваша конкретная проблема может быть решена (i), посмотрев дату истечения срока действия cookie id (ы) сессии и помня, что файлы cookie с тайм-аутом не обновляются при посещении / обновлении страницы.