У меня есть приложение для входа / выхода из системы: я хочу уничтожить сеанс, его работа отлично, когда я закрываю браузер ((все вкладки)), IE, Firefox работает. Но я хочу уничтожить сеанс, когда пользователь закрывает одну вкладку. Я использую :
session_set_cookie_params(0); session_start();
Браузеры только уничтожают сеансовые файлы cookie, когда завершается весь процесс браузера. Не существует надежного способа определить, когда пользователь закрыл вкладку. Существует обработчик onbeforeunload
к onbeforeunload
вы можете подключиться, и, надеюсь, удастся сделать аякс-вызов серверу, чтобы сказать закрытие вкладки, но он не является надежным.
А что, если у пользователя две или более таблицы открыты на вашем сайте? Если они закрывают одну вкладку, другая будет эффективно выходить из системы, даже если пользователь полностью намерен продолжать использовать ваш сайт.
Решение заключается в реализации тайм-аута сеанса с помощью собственного метода. Используйте простую метку времени, которая обозначает время последнего запроса и обновляет его с каждым запросом:
Вам нужно закодировать что-то похожее на это
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // request 30 minates ago session_destroy(); session_unset(); } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time
Подробнее об этом вы можете найти здесь, который похож на ваш вопрос. Уничтожьте или отмените сеанс, когда пользователь закроет браузер, не нажимая на выход .
Он охватывает все, что вам нужно.