Ответ 1
Я использую 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>