У меня тоже были проблемы с этим. Я думал, что каждый
session_set_cookie_params($sessionTime, '/', $domain);
session_start();
увеличивает срок действия файла cookie PHPSESSID. Но на самом деле cookie PHPSESSID устанавливается session_start()
только первый раз в сеансе, когда генерируется новый идентификатор сеанса.
Моя цель состояла в том, чтобы время истечения сеанса восстанавливалось при каждом открытии страницы. Я понял, что сессия может закончиться по двум причинам:
- Срок действия файла cookie PHPSESSID истекает, а время его истечения не регенерируется на
session_start()
, поэтому сессия всегда истекает из-за файла cookie со временем истечения.
- Никакая активность пользователя не приведет к истечению срока сеанса на стороне сервера. Он устанавливается
ini_set('session.gc_maxlifetime', $sessionTime)
.
Решение в этом случае заключается в том, что вы не будете устанавливать время истечения для cookie, но session.gc_maxlifetime
по-прежнему установлено:
function my_session_start($maxtime = 300)
{
ini_set('session.gc_maxlifetime', $maxtime);
session_set_cookie_params(0, '/', "." . $domain);
session_start();
}
Наиболее важным является 0
в session_set_cookie_params(0, '/', "." . $domain)
, тогда срок действия файла cookie не истечет, и нет необходимости увеличивать срок его действия. Этот файл cookie будет удален при закрытии браузера. Тогда мы ограничены только временем, которое истекает на стороне сервера.
У меня также были проблемы с тем, что я не мог продлить время сеанса PHP с помощью jQuery Ajax PING, потому что я установил время истечения для PHPSESSID в cookie. 0
решает все проблемы с непредвиденными окончаниями сеансов. Извините за мой английский. Удачи.