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

В PHP сессия остается активной до тех пор, пока не произойдет ее завершение или истечет время ее хранения. Обычно, сессия завершается, когда пользователь явно выходит из системы или закрывает браузер. Однако, в ситуациях, когда пользователь просто закрывает вкладку или окно браузера, сессия не завершается автоматически, и данные сессии остаются доступными для последующих запросов.

Если вы хотите удалить сессию автоматически при закрытии вкладки/окна браузера, вам придется использовать JavaScript. При закрытии вкладки или окна, JavaScript может осуществить AJAX-запрос к серверу для удаления сессии.

Вот пример кода на JavaScript, который может быть использован для отправки AJAX-запроса при закрытии вкладки/окна браузера:

window.addEventListener("beforeunload", function() {
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "logout.php", false); // замените "logout.php" на URL скрипта, который удаляет сессию
    xhr.send();
});

В этом примере мы используем событие beforeunload, которое происходит перед закрытием вкладки/окна браузера. В обработчике события мы создаем новый объект XMLHttpRequest, открываем соединение с сервером и отправляем POST-запрос на скрипт logout.php. В этом скрипте должна быть реализована логика удаления сессии.

В серверном скрипте logout.php вам необходимо выполнить операции, чтобы удалить сессию. В PHP, чтобы удалить текущую сессию, вы можете использовать функцию session_destroy(). Пример кода:

<?php
session_start();
session_destroy();
?>

Этот код будет удалять текущую сессию при выполнении запроса из JavaScript.

Однако, стоит отметить, что не все браузеры поддерживают событие beforeunload и, возможно, пользователь все равно должен будет явно выйти из системы, чтобы завершить сессию. Реализация автоматического удаления сессии при закрытии вкладки/окна браузера может быть ограничена и зависит от конкретных условий использования и настроек браузера.