Появилась довольно интересная задачка красиво и вменяемого решения которой я не нашел.
Необходимо разлогинивать пользователя когда тот каким-либо образом покидает страницу (закрытие вкладки/браузера, переход на вкладке на другой портал и т.д.)
Решение по событиям unload и onbeforeunload не подходит по двум причинам:
1. Не работает в Опере
2. Требуется установка меток на каждый элемент допустимого перехода. Что само по себе кривовато выглядит. Плюс в проекте очень много аяксовых подгрузок элементов управления(ссылок, кнопок и т.п.), и все их нелегко отследить.
Session storage в браузере неплохое решение, но к сожалению он не очищается при переходе внутри вкладке на другую страницу в строке ввода адреса.
Делать постоянные аякс запросы на сервер с меткой «Я еще тут», плохой вариант, так как время реакции на закрытие вкладки нужно практически мгновенное, а при установке шага запроса, к примеру, в 5 секунд, мы будем выкидывать пользователя если у негшо страничка будет прогружаться дольше.
Может у кого-то есть идеи как это можно реализовать?
Браузеры все последние. IE 8+
UPD. Возможно некорректно выразился. Но мне нужно логаутить, не в тот момент когда пользователь переключился на другую задачу (свернул окно, переключился на другую вкладку), а в тот момент когда пользователь закрыл вкладку или в этой вкладке ушел по другом адресу
Я бы попробовал сделать так:
На beforonunlod отправил бы синхронный запрос на сервер, что пользователь каким-либо образом начал выгружать (это может быть обновление по F5, или закрытие вкладки) страницу.
Затем на сервере ставим timeout о том, что пользователь выгрузил. Если через N времени, от пользователя не пришёл запрос на какую-либо страницу приложения, то вызываем для него logout.