登录会话永不过期
Login session never expires
我在登录过程中在 AccountController
中创建一个 HttpCookie,就像这样
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
当 model.RememberMe
为 false
时,我注意到我从未注销过,即使我重新启动浏览器也是如此。会话不应在 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 分钟后过期。
我在登录过程中在 AccountController
中创建一个 HttpCookie,就像这样
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
当 model.RememberMe
为 false
时,我注意到我从未注销过,即使我重新启动浏览器也是如此。会话不应在 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 分钟后过期。