@MZhack

Как удалить сессию при закрытии вкладки/окна браузера?

Как удалить сессию залогиненного пользователя при закрытии вкладки/окна браузера?

Код (условно, без неимеющего к вопросу отношения):
index.php
session_start(['cookie_lifetime' => 0]);
login.php
if (password_verify($_POST['password'], $user['password'])) {
	$_SESSION['user_id'] = $user['id'];
	$result['success'] = true;
	echo json_encode($result, JSON_UNESCAPED_UNICODE);
}


При закрытии вкладки/браузера или перезапуске веб-сервера, сессия не удаляется. Она вечная остаётся, так как при открытии браузера - она же обновляется.

php.ini:
session.cookie_lifetime = 0
session.gc_maxlifetime = 3600


Пробовал через JS:
$(window).on('unload', function() {
    $.ajax({
        url: 'logout.php',
        type: 'GET',
        async: false
    });
});

и так
window.onunload = function() {
	var xhr = new XMLHttpRequest();
	xhr.open("GET", "logout.php", false);
	xhr.send();
};

Менял unload на beforeunload - ничего. Изменения асинхронного запроса на синхронный - тоже ничего не дают.
При закрытии вкладки/или браузера - код logout.php не выполняется.

Код logout.php (при обращении к скрипту в адресной строке - он работает успешно):
session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}
session_destroy();


Как добиться результата из вопроса? P.S. session.gc_maxlifetime = 0 тоже не даёт результата.
  • Вопрос задан
  • 485 просмотров
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
При закрытии вкладки она и не должна удаляться. При закрытии браузера как-бы должна, но в браузерах давно есть галка "восстанавливать сессию". Можете найти её и отключить, если вам для себя.

Upd: а вас не устроит установить сессию на минуту, например?
Ответ написан
@grek_cheburek
Программист самоучка
Могу лишь предложить такую логику. Нужно поставить жизнь сессии пять минут. Каждый раз, пока пользователь на сайте, будет обновляться жизнь сессии. Когда пользователь закроет вкладку или окно, то сессия больше обновляться не будет. Соответственно она удалится.
Ответ написан
@alekssamos
Программист любитель
А если так? Через js использовать sessionStorage, записать туда какой-то ключ и при запросах его передавать?
Как хранить что-то в браузере, только пока открыта вкладка
Почитайте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы