Я настроил время жизни куки на полный день, но после 15-20 минут простоя я все равно выхожу из системы. Самое странное, что на localhost все работает нормально, но когда я запустил свой веб-сайт, я начал испытывать эту проблему с точно таким же кодом.
Я прочитал в stackoverflow, что это может быть связано с session.gc_maxlifetime , поэтому я даже отредактировал это на уровне .htaccess. Я изменил его с 1440 на 86400, но проблема все еще сохраняется.
Вот краткое изложение моего кода.
Когда пользователь входит в систему, я проверяю, есть ли у пользователя файл cookie с именем «AUTHID». Если пользователь это делает, я сначала его удаляю.
if (isset($_COOKIE['AUTHID'])) {
unset($_COOKIE['AUTHID']);
setcookie('AUTHID', null, -1, '/');
}
После этого, в зависимости от того, выбрал ли пользователь опцию «Запомнить меня», я устанавливаю значение времени жизни файла cookie, и оно создает файл cookie, который я вижу в настройках Chrome с абсолютно правильным сроком действия.
session_name('AUTHID');
ini_set('session.cookie_httponly', 1);
if(isset($_POST['remember-me'])) {
ini_set('session.gc_maxlifetime', 604800);
session_set_cookie_params(604800,"/");
} else {
ini_set('session.gc_maxlifetime', 86400);
session_set_cookie_params(86400,"/");
}
session_start();
Наконец, у меня есть функция php, чтобы проверить, вошел ли пользователь на каждой странице:
$rel_url = "$_SERVER[REQUEST_URI]";
session_name('AUTHID');
session_start();
if(!isset($_SESSION['user_id'])) {
if (strpos($rel_url, 'login=success') !== false) {
header('Location: index.php');
}
header('Location: login-with-bg.php?access-denied=logged-out');
exit();
}
Это прекрасно работает на моем локальном хосте, но когда я загрузил этот код на свой хост-сервер, хотя cookie все еще создается с правильной датой истечения срока, но если мой браузер простаивает в течение 15-20 минут, мой сеанс получает время вышло.
РЕДАКТИРОВАТЬ: из статьи у меня появилась идея делать AJAX-вызовы каждые 10 минут или около того, и это работает, когда браузер открыт. Однако мне нужен полный метод, который работает, даже если браузер закрыт.
EDIT2: код AJAX, который у меня есть для поддержания сеанса:
function keep_alive() {
$.get('index.php',null)
}
keep_alive_interval = setInterval(keep_alive, 600000)