Ich musste den Benutzer automatisch abmelden, wenn der Browser oder die Registerkarte geschlossen wird, aber nicht, wenn der Benutzer zu anderen Links navigiert. Ich wollte auch nicht, dass eine Bestätigungsaufforderung angezeigt wird, wenn dies passiert. Nachdem ich eine Weile damit zu kämpfen hatte, insbesondere mit IE und Edge, habe ich Folgendes getan (überprüft, ob ich mit IE 11, Edge, Chrome und Firefox arbeite), nachdem ich den Ansatz anhand dieser Antwort begründet hatte .
Starten Sie zunächst einen Countdown-Timer auf dem Server in der beforeunload
Ereignisbehandlungsroutine in JS. Die Ajax-Aufrufe müssen synchron sein, damit IE und Edge ordnungsgemäß funktionieren. Sie müssen auch verwenden return;
, um zu verhindern, dass der Bestätigungsdialog wie folgt angezeigt wird:
window.addEventListener("beforeunload", function (e) {
$.ajax({
type: "POST",
url: startTimerUrl,
async: false
});
return;
});
Durch Starten des Timers wird das cancelLogout
Flag auf false gesetzt . Wenn der Benutzer die Seite aktualisiert oder zu einem anderen internen Link navigiert, wird das cancelLogout
Flag auf dem Server auf true gesetzt . Nach Ablauf des Timer-Ereignisses überprüft es das cancelLogout
Flag, um festzustellen, ob das Abmeldeereignis abgebrochen wurde. Wenn der Timer abgebrochen wurde, wird der Timer gestoppt. Wenn der Browser oder die Registerkarte geschlossen würde, cancelLogout
würde das Flag falsch bleiben und der Ereignishandler würde den Benutzer abmelden.
Implementierungshinweis: Ich verwende ASP.NET MVC 5 und brich die Abmeldung in einer überschriebenen Controller.OnActionExecuted()
Methode ab.