Задать вопрос
@matthewstafford

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

Здравствуйте!

Каким способом можно убивать сессию при закрытии вкладки?
  • Вопрос задан
  • 3193 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
dima9595
@dima9595
Junior PHP
Сессия хранится на сервере. Как вариант можно сделать так:
1. У пользователя есть сессия, рассчитанная на N минут.
2. Когда пользователь делает что-то на сайте (переходит по ссылкам, пишет в комментарии и т.п.), т.е. он онлайн, вы обновляете жизнь сессии.
3. Когда пользователь закрывает вкладку, сессия остаётся на сервере. Не забываем про 1-2 пункты.
4. Как только пользователь зашёл снова на сайт через N минут, то проверяем, есть ли время хранения сессии этого пользователя. Если нет, то удаляем сессию. А если же есть, то снова перезаписываем.

Так же, в дополнение, можно добавить CRON. Он чекает сессии, и если время жизни сессии меньше, чем время сейчас+N минут/секунд (пункт 1), то удаляет её. Иначе не трогает.

Как то так. Надеюсь мой ответ подтолкнёт к чему-то большему!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
dollar
@dollar
Делай добро и бросай его в воду.
JS:
window.addEventListener("beforeunload", function(e){
   // Сделать что-то. Например, ajax на сервер.
}, false);

А на сервере дополнительно обрывать по таймеру.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
100% способа проверить закрыл ли клиент вкладку нет, единственное что можно ПОПРОБОВАТЬ - по событию onbeforeunload посылать аякс запрос к серверу на логаут/дестрой сессии.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Каким способом можно убивать сессию при закрытии вкладки?
У вас там в тегах php, потому я предположу, что вы о вот этих сессиях.

Ответ: никаким.

PHP не знает что там у пользователя случилось: может он вкладку закрыл, или крышку ноута закрыл, или заехал в тоннель, или у него комп завис, или интернет отключили за неуплату.

Можно прикрутить трюк с beforeunload как предлагает dollar, но это уже не чисто на PHP решение. Ну и возможны ложные срабатывания, когда открыты несколько вкладок. Придется дополнительные проверки делать.

Еще можно сессионной куке не устанавливать Expires, и тогда она должна удалиться сама при закрытии сессии браузером, но... есть браузерные настройки и плагины, которые позволяют не обрывать сессию при закрытии вкладки и вообще никогда.

Потому предлагаю не мучиться, и просто выставить удобное для вас время жизни сессии.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы