Мені потрібно було автоматично виходити з користувача, коли браузер або вкладка закриваються, але не тоді, коли користувач переходить на інші посилання. Я також не хотів, щоб повідомлення про підтвердження було показано, коли це станеться. Дещо боровшись із цим, особливо з IE та Edge, ось що я закінчив (перевірив роботу з IE 11, Edge, Chrome та Firefox) після того, як відмовився від підходу даною відповіддю .
Спочатку запустіть таймер зворотного відліку на сервері в beforeunloadобробці подій у JS. Для правильної роботи IE та Edge дзвінки ajax повинні бути синхронні. Вам також потрібно використовувати, return;щоб запобігти появі діалогового вікна підтвердження:
window.addEventListener("beforeunload", function (e) {
$.ajax({
type: "POST",
url: startTimerUrl,
async: false
});
return;
});
Запуск таймера встановлює cancelLogoutпрапор значення false . Якщо користувач оновлює сторінку або переходить на інше внутрішнє посилання, cancelLogoutпрапор на сервері встановлюється як вірно . Після закінчення події таймера він перевіряє cancelLogoutпрапор, щоб побачити, чи подія виходу була скасована. Якщо таймер скасовано, він зупинить таймер. Якщо веб-переглядач або вкладка були закриті, cancelLogoutпрапор залишився б помилковим, а обробник подій вимкне користувача.
Примітка про реалізацію: я використовую ASP.NET MVC 5 і скасовую вихід із Controller.OnActionExecuted()способом, що перекрито .