Ich verwende in meinem MasterPage etwas Javascript, um den Benutzer (nach einer Aufforderung zur Erneuerung der Sitzung) zur Logout-Aktion umzuleiten. Es wird eine AJAX-Anfrage zurück zur Startseite der App verwendet, um das serverseitige Sitzungsfenster zu aktualisieren, wenn der Benutzer auf die Schaltfläche im Dialogfeld klickt, um die Sitzung zu verlängern. Verlässt sich auf jQuery und jQuery UI für den Dialog.
<% if (this.Request.IsAuthenticated)
{
int sessionDialogWait = 2 * 60 * 1000 - 60 * 500; // ms = 1,5 Minuten
int sessionTimeout = 28 * 60 * 1000; // ms = 28 Minuten
if (ViewData["sessionTimeout"] != null)
{
sessionTimeout = ((int)ViewData["sessionTimeout"] * 60 - 120) * 1000;
}
%>
var logoutTimer = null;
var sessionTimer = null;
var sessionTimeout = Number('<%= sessionTimeout %>');
var sessionDialogWait = Number('<%= sessionDialogWait %>');
$(document).ready( function() {
$('#sessionEndDialog').dialog( {
autoOpen: false,
bgiframe: true,
modal: true,
buttons: {
OK: function() {
$(this).dialog('close');
$.get( '<%= Url.Action( "About", "Home" ) %>', scheduleSessionPrompt, 'html' );
},
Logout: logoutOnSessionExpires
}
}).ajaxStart( function() { scheduleSessionPrompt(); } );
scheduleSessionPrompt();
});
function scheduleSessionPrompt()
{
if (logoutTimer) clearTimeout(logoutTimer);
if (sessionTimer) clearTimeout(sessionTimer);
sessionTimer = setTimeout( sessionExpiring, sessionTimeout );
}
function sessionExpiring()
{
logoutTimer = setTimeout( logoutOnSessionExpires, sessionDialogWait );
$('#sessionEndDialog').dialog('open');
}
function logoutOnSessionExpires()
{
window.location.href = '<%= Url.Action( "Logout", "Account" ) %>';
}
<% } %>
Ihre Sitzung läuft in Kürze ab. Klicken Sie auf OK, um Ihre Sitzung zu erneuern, oder auf Logout, um sich von der Anwendung abzumelden.