ASP.NET 窗体身份验证超时和会话超时

Posted

技术标签:

【中文标题】ASP.NET 窗体身份验证超时和会话超时【英文标题】:ASP.NET Forms Authentication Timeout and Session Timeout 【发布时间】:2015-11-05 22:38:24 【问题描述】:

我在 asp.net 中使用表单身份验证。我已将超时设置为 1 分钟。一旦我登录,如果通过身份验证,我将被重定向到主页 (HomePage.aspx)。这工作正常。如果我离开该网站并在 1 分钟后返回,并尝试访问任何其他页面,我将按预期重定向到登录页面。我的问题是,如果我回来做一些回帖或刷新,那么只有我被重定向到登录页面,否则我将留在同一页面上。如果我在 1 分钟后回来,我应该怎么做才能让登录页面出现在屏幕上。

<authentication mode="Forms">
<forms  loginUrl="~/LoginPage.aspx"  timeout="1"/>
</authentication>

<sessionState timeout="1"></sessionState>

【问题讨论】:

您好,感谢您的回答。下面的帖子也有帮助。***.com/questions/15991652/asp-net-automatic-logout 【参考方案1】:

Global.asax 中检查您的Session_End,然后尝试输入一些代码以重定向到您的登录页面。

【讨论】:

【参考方案2】:

您可以关注asp-net-push-redirect-on-session-timeout。这篇 SO 帖子展示了在页眉部分使用 &lt;meta&gt; 进行重定向的方法。我尚未对其进行测试,但我怀疑设置&lt;meta&gt;,即使对于未登录的页面,它也可能总是在会话超时后重定向,特别是如果它在MasterPages 中实现。

如果您不想使用标头或想要自定义基于 javascript 的解决方案,您可以这样做:

<script type="text/javascript">
    // get session timeout value
    var sessionTimeout = '<%= Session.Timeout %>';
    // convert from minutes to ms
    var sTimeout = parseInt(sessionTimeout) * 60 * 1000;
    setTimeout('SessionWarning()', sTimeout);

    function SessionWarning() 
        // use a session variables (User_ID) that confirms we have a logged in user
        var userid = '<%= Session("User_ID") %>';

        // ignore for pages that can be viewed without login. In that case User_ID will not be set
        // also on session end User_ID needs to be set to zero/null/blank
        if (userid == '') 

         else 
            if (parseInt(userid) > 0) 
                // if the user is logged in redirect to login page on session timeout
                window.location.href= '/LoginPage.aspx';
            
        
    
</script>

您可以将此脚本放置在您想要自动重定向的页面上,或放在MasterPage 上以便在所有页面上使用。

【讨论】:

以上是关于ASP.NET 窗体身份验证超时和会话超时的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net 形成身份验证 cookie 不遵守 IIS7 的超时

根据 ASP.NET 中的角色设置身份验证 cookie 超时长度

带有 Windows 身份验证的 ASP.Net Core 3.1 中的空闲超时

表单身份验证超时与会话超时

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求

Laravel 身份验证会话超时