Я реализую управление сессиями в приложении Spring boot + AngularJS.Spring обрабатывает сеанс - он основан на файлах cookie.
Как я могу надежно сообщить приложению Spring, что пользователь закрыл окно браузера (отправляет /logout
на сервер и удаляет информацию о сеансе из браузера), а не когдастраница обновляется?Я пробовал с событием onbeforeunload
, хотя оно срабатывает и перед обновлением страницы.Также я попытался с несколькими опциями, которые проверяют состояние события (e.clientX, e.clientY, event || window.event
) - нет разницы между закрытием и обновлением в моем случае (в последнем Chrome).Я пытался использовать sessionStorage, но я не уверен, хочу ли я основывать свою безопасность на HTML5 - кто-то может использовать более старый браузер.
На данный момент я реализовал решение, которое отправляет запрос /session
каждые 5 секунд.(он отправляет в любом случае, чтобы проверить, не истек ли сеанс), и в приложении Spring я сохраняю время.Если интервал между /session
вызовами превышает 7 секунд - сеанс становится недействительным и пользователю необходимо снова войти в систему.В обычном сценарии он работает нормально, хотя я могу себе представить, что он выйдет из системы, когда в сети будут какие-то задержки.Есть ли надежное кросс-браузерное решение?