簡體   English   中英

登錄會話永不過期

[英]Login session never expires

我在登錄過程中像這樣在AccountController中創建一個HttpCookie

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

model.RememberMefalse時,即使重新啟動瀏覽器,我也不會注銷。 會話在20分鍾后或關閉瀏覽器后是否不應該過期?

另外,在身份驗證過程中,我還使用此方法設置cookie以存儲Role信息。 這還將設置一個非持久性cookie。 這會影響登錄cookie嗎?

我注意到的是,當我在Global.asax.cs反序列化cookie時, HttpCookieDateTime.MinValue到期,而authTicket的到期日最長為20分鍾。 如果我讓這段時間過去了,那么我不會注意到用戶注銷,實際上是由於過期日期在未來20分鍾左右跳了,因此更新了Cookie,但是我看不到代碼中發生了這種情況!

誰能幫助解釋發生了什么事?

    protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

        if (authCookie != null)
        {
            var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            var serializer = new JavaScriptSerializer();
            var serializeModel = serializer.Deserialize<EMPrincipalSerializeModel>(authTicket.UserData);

            if (!authTicket.Expired && serializeModel != null && HttpContext.Current.User.Identity.IsAuthenticated)
            {
                var newUser = new EMPrincipal(authTicket.Name);
                newUser.Id = serializeModel.Id;
                newUser.RealName = serializeModel.RealName;
                newUser.Username = serializeModel.UserName;

                HttpContext.Current.User = newUser;
            }
        }
    }

由於滑動到期,您的身份驗證到期正在更改,這意味着在每個請求上,到期都將重置為x分鍾。 這是FormsAuthentication的默認行為。 身份驗證僅在閑置x分鍾后失效,每次調用檢查會話的請求時,您都將對其進行更新。

您可以根據需要禁用此功能: https : //msdn.microsoft.com/zh-cn/library/system.web.security.formsauthentication.slidingexpiration%28v=vs.110%29.aspx

如果禁用,則身份驗證將在創建后的x分鍾后失效,而不是在不活動后的x分鍾后失效。

暫無
暫無

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

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