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

Как отследить что пользователь покинул страницу?

Появилась довольно интересная задачка красиво и вменяемого решения которой я не нашел.

Необходимо разлогинивать пользователя когда тот каким-либо образом покидает страницу (закрытие вкладки/браузера, переход на вкладке на другой портал и т.д.)



Решение по событиям unload и onbeforeunload не подходит по двум причинам:

1. Не работает в Опере

2. Требуется установка меток на каждый элемент допустимого перехода. Что само по себе кривовато выглядит. Плюс в проекте очень много аяксовых подгрузок элементов управления(ссылок, кнопок и т.п.), и все их нелегко отследить.



Session storage в браузере неплохое решение, но к сожалению он не очищается при переходе внутри вкладке на другую страницу в строке ввода адреса.



Делать постоянные аякс запросы на сервер с меткой «Я еще тут», плохой вариант, так как время реакции на закрытие вкладки нужно практически мгновенное, а при установке шага запроса, к примеру, в 5 секунд, мы будем выкидывать пользователя если у негшо страничка будет прогружаться дольше.



Может у кого-то есть идеи как это можно реализовать?



Браузеры все последние. IE 8+



UPD. Возможно некорректно выразился. Но мне нужно логаутить, не в тот момент когда пользователь переключился на другую задачу (свернул окно, переключился на другую вкладку), а в тот момент когда пользователь закрыл вкладку или в этой вкладке ушел по другом адресу
  • Вопрос задан
  • 28853 просмотра
Подписаться 20 Оценить Комментировать
Ответ пользователя kidar2 К ответам на вопрос (8)
@kidar2
Я бы попробовал сделать так:
На beforonunlod отправил бы синхронный запрос на сервер, что пользователь каким-либо образом начал выгружать (это может быть обновление по F5, или закрытие вкладки) страницу.
Затем на сервере ставим timeout о том, что пользователь выгрузил. Если через N времени, от пользователя не пришёл запрос на какую-либо страницу приложения, то вызываем для него logout.
Ответ написан
Комментировать