Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 对每个请求执行SetAuthCookie的缺点_Asp.net_Forms Authentication - Fatal编程技术网

Asp.net 对每个请求执行SetAuthCookie的缺点

Asp.net 对每个请求执行SetAuthCookie的缺点,asp.net,forms-authentication,Asp.net,Forms Authentication,在过去的几个月里,我们已经有用户抱怨他们的身份验证有时会提前到期——在仅仅20分钟的不活动之后,尽管我们已经将身份验证超时设置为30。我今天发现,SlidingExpiration只在剩下不到一半的授权时间时重置,留下做某事、等待10分钟、做其他事情、等待21分钟以及获得“提前”超时的可能性 在母版页的页面加载中这样做是否有任何潜在的缺点 if(CurrentUser != null) { FormsAuthentication.SetAuthCookie(CurrentUser.Use

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

在母版页的页面加载中这样做是否有任何潜在的缺点

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);
}
var cookie=Request.Cookies[FormsAuthentication.formscookeName];
var ticket=FormsAuthentication.Decrypt(cookie.Value);
if(ticket.IssueDate.AddMinutes(1)DateTime.Now){
FormsAuthentication.SetAuthCookie(currentUser.UserName,false);
}

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


如果您能够,最简单的方法就是取消过期超时。

我们无法取消超时,但我已将其设置为仅在至少一分钟后续订。性能仍然不太好,但它确实将超时时间可靠地保持在29到30分钟之间。关于代码的两个注意事项:1)我非常确定,如果票证过期,他们无法到达那里,但如果票证过期超过30分钟,我确保不会重置它。2) currentUser是我们应用程序中的一个变量;如果您试图直接编译它,它将不起作用。