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

时间:2015-11-05 22:38:24

标签: asp.net forms-authentication

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以关注asp-net-push-redirect-on-session-timeout。此SO帖子显示了使用页面标题部分中的<meta>重定向的方法。我没有测试过,但是我怀疑设置<meta>,它可能总是在会话超时后重定向,即使对于未登录的页面也是如此,特别是在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上以便在所有页面上使用。