簡體   English   中英

ASP.NET表單身份驗證超時和會話超時

[英]ASP.NET Forms Authentication Timeout and Session Timeout

我在asp.net中使用表單身份驗證。 我已將超時設置為1分鍾。 登錄后,如果通過身份驗證,我將被重定向到主頁(HomePage.aspx)。 一切正常。 如果我離開該網站並在1分鍾后回來,並嘗試訪問任何其他頁面,則將按預期重定向到“登錄”頁面。 我的問題是,如果我返回並做一些回發或刷新,則僅將我重定向到登錄頁面,否則我將停留在同一頁面上。 如果我在一分鍾后回來,該怎么辦才能使登錄頁面顯示在屏幕上。

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

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

Global.asax檢查您的Session_End ,然后嘗試放置一些代碼以重定向到您的登錄頁面。

您可以按照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上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM