Я использую некоторый Javascript в моей MasterPage, чтобы перенаправить пользователя (после запроса возобновить сеанс) к действию выхода из системы. Он использует AJAX-запрос обратно на домашнюю страницу приложения, чтобы обновить окно сеанса на стороне сервера, когда пользователь нажимает кнопку в диалоговом окне, чтобы продлить сеанс. Для диалога использует jQuery и пользовательский интерфейс jQuery.
<% if (this.Request.IsAuthenticated)
{
int sessionDialogWait = 2 * 60 * 1000 - 60 * 500; // ms = 1.5 minutes
int sessionTimeout = 28 * 60 * 1000; // ms = 28 minutes
if (ViewData["sessionTimeout"] != null)
{
sessionTimeout = ((int)ViewData["sessionTimeout"] * 60 - 120) * 1000;
}
%>
<script type="text/javascript">
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" ) %>';
}
</script>
<% } %>
<div id="sessionEndDialog" title="Session Expiring" style="display: none;">
<p>Your session is about to expire. Click OK to renew your session or Logout to logout of the application.</p>
</div>