Asp.Net MVC 2中会话超时时的确认

Posted

技术标签:

【中文标题】Asp.Net MVC 2中会话超时时的确认【英文标题】:Confirmation when session timeout in Asp.Net MVC 2 【发布时间】:2010-12-07 10:08:20 【问题描述】:

我想在会话超时剩余 2 分钟时提示用户。如果用户按下 Yes,它会刷新其当前会话而不会丢失表单数据,如果用户选择 No 则它​​会注销其会话。我想知道如何捕获剩余的两分钟以及如何在不丢失表单数据的情况下刷新当前会话。我使用带有 JQuery 的 Asp.Net MVC 2,还有一件事我没有使用表单身份验证

【问题讨论】:

你在说什么会话?是 HttpSession 吗?是否激活了滑动到期?另外,注销其会话是什么意思? 【参考方案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 超时,尽管会话已刷新。

【讨论】:

以上是关于Asp.Net MVC 2中会话超时时的确认的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC、NHibernate 会话和 NHibernate 事件

ASP.NET MVC:如何防止会话锁定?

ASP.NET Core MVC 会话相同的站点 URL

ASP.NET MVC 中的会话变量

ASP.NET MVC 4 和会话安全漏洞

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量