【问题标题】:Downside to doing a SetAuthCookie every request每个请求都执行 SetAuthCookie 的缺点
【发布时间】:2012-08-15 18:21:34
【问题描述】:

在过去的几个月里,尽管我们将身份验证超时设置为 30,但我们有用户抱怨他们的身份验证有时会提前到期 - 仅在 20 分钟不活动之后。我今天发现 SlidingExpiration 仅在以下情况下才会重置剩下不到一半的身份验证时间,留下了做某事的可能性,等待 10 分钟,做其他事情,等待 21 分钟,并获得“提前”超时。

在我的母版页的 Page_Load 中做这样的事情有什么潜在的缺点吗?

if(CurrentUser != null) {
    FormsAuthentication.SetAuthCookie(CurrentUser.UserName, false);
}

...从而在每个请求中重置滑动到期?

编辑:

这段代码是我最终使用的;它每分钟只重置一次令牌。

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var ticket = FormsAuthentication.Decrypt(cookie.Value);

if (ticket.IssueDate.AddMinutes(1) < DateTime.Now && ticket.IssueDate.AddMinutes(30) > DateTime.Now) {
    FormsAuthentication.SetAuthCookie(currentUser.UserName, false);
}

【问题讨论】:

  • 关于代码的两个注意事项:1)我很确定他们不能用过期的票到达那里,但如果他们超过 30 分钟,我确保不要重置它。 2) currentUser 是我们应用程序中的一个变量;如果你试图直接编译它是行不通的。

标签: asp.net forms-authentication


【解决方案1】:

最大的缺点是它会禁用缓存,例如 指令将不再正常工作。因此,由于缓存未命中,您可能会开始看到性能下降。

如果可以的话,最简单的做法就是延长过期超时时间。

【讨论】:

  • 我们无法延长超时时间,但我确实将其设置为仅在至少一分钟后才更新。仍然不是很好的性能,但它确实将超时可靠地保持在 29 到 30 分钟之间。
猜你喜欢
  • 2014-09-13
  • 2019-06-24
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多