每个请求都需要执行SetAuthCookie

问题描述:

在过去的几个月里,我们有用户抱怨说,尽管我们的身份验证超时设置为30,但他们的身份验证有时会提前过期 - 只有20分钟的非活动状态。今天发现SlidingExpiration只在剩下不到一半的授权时间时才会重置,留下了做某事的可能性,等待十分钟,做其他事情,等待21分钟,并且获得“提早”超时。每个请求都需要执行SetAuthCookie

在Master Page的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); 
} 
+0

关于代码的两个注意事项:1)我非常确定他们无法使用过期的票据到达那里,但是如果他们超过30分钟,我一定不要重置。 2)currentUser是我们应用程序中的一个变量;如果你试图直接编译它,它将无法工作。 – 2012-08-21 15:17:32

最大的缺点是它会禁用缓存, <%@ OutputCache%>指令将不再正常工作。所以您可能会开始看到由于缓存未命中而导致性能下降。

如果您能够做到,最简单的做法就是提高到期超时时间。

+0

我们无法缓冲超时时间,但我确实已设置为只在至少一分钟后才更新。性能仍然不是很好,但它确实在29到30分钟之间保持超时。 – 2012-08-21 15:10:00