登录会话永不过期

Login session never expires

我在登录过程中在 AccountController 中创建一个 HttpCookie,就像这样

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

model.RememberMefalse 时,我注意到我从未注销过,即使我重新启动浏览器也是如此。会话不应在 20 分钟后或关闭浏览器后过期吗?

我还在身份验证过程中使用 this method 设置了一个 cookie 来存储角色信息。这也会设置一个非持久性 cookie。这会影响登录 cookie 吗?

我注意到,当我在 Global.asax.cs 中反序列化我的 cookie 时,HttpCookie 的有效期为 DateTime.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/en-us/library/system.web.security.formsauthentication.slidingexpiration%28v=vs.110%29.aspx

如果禁用,身份验证将在创建后 x 分钟后过期,而不是在不活动后 x 分钟后过期。