Мені потрібно було автоматично виходити з користувача, коли браузер або вкладка закриваються, але не тоді, коли користувач переходить на інші посилання. Я також не хотів, щоб повідомлення про підтвердження було показано, коли це станеться. Дещо боровшись із цим, особливо з 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()
способом, що перекрито .