Как удалить сессию залогиненного пользователя при закрытии вкладки/окна браузера?
Код (условно, без неимеющего к вопросу отношения):
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 тоже не даёт результата.