Я установил время таймаута сеанса в течение 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 с тайм-аутом не обновляются при посещении / обновлении страницы.