私はログアウトアクションに(プロンプトの後にセッションを更新する)ユーザーをリダイレクトするために、私のマスターページにいくつかのJavascriptを使用しています。ユーザーがダイアログのボタンをクリックしてセッションを延長すると、AJAXリクエストがアプリケーションのホームページに戻ってサーバー側のセッションウィンドウが更新されます。ダイアログのjQueryとjQuery UIに依存します。
<% 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>
これにGlobal.asaxのSession_Endを使用できますか? –
ブラウザがセッションが生きているかどうか定期的にチェックしていない限り、ブラウザをSession_Endイベントから別のページにリダイレクトする方法はわかりません。残念ながら、ブラウザを使用すると、セッションごとにクエリが更新されるため、人為的にセッションが維持されます。私はこれをjQueryプラグインに変換しようとしています。 – tvanfosson
私が間違っているが、Session_Endがバックグラウンドスレッドで実行されているため、ユーザーと通信できない場合は、私を修正してください。 あなたの仕事が大好きです、あなたのアプローチは非常にうまく動作します – CodeKiwi