我希望在会话超时2分钟后提示用户。如果用户按是,则在用户选择否时刷新其当前会话而不会丢失表单数据,然后注销其会话。我想知道如何捕获剩下的两分钟以及如何在不丢失表单数据的情况下刷新当前会话。我使用Asp.Net MVC 2和JQuery,还有一件事我不使用表单身份验证
答案 0 :(得分:1)
嗯,会话在每次请求后刷新。您可以在Session.Timeout
上找到会话超时。您可以在主页中执行以下操作:
<script type="text/javascript">
function keepAlive() {
window.clearTimeout(window.sessionKeepAlive);
window.sessionKeepAlive = window.setTimeout(function() {
if(confirm('refresh session?')) {
// submit ajax request
} else {
// logout
}
}, <%= (Session.Timeout - 2) * 60 * 1000 %>);
}
keepAlive();
</script>
然后,如果您正在使用AJAX,则需要在每次AJAX完成回调时重置超时:
$(document).ajaxComplete(keepAlive);
要让这100%可靠,将会很困难。您需要确保确认回调中的AJAX请求实际上触及状态服务器,并且您需要处理AJAX请求失败时发生的情况。即使你有这个脚本,这些东西也可能导致你的会话过期。
硬币的另一面是比必要时更频繁弹出的地方。例如,如果您通过javascript向DOM添加图像,并且该图像的检索触及您的状态,则该请求将不会重置javascript超时,尽管会话已刷新。