我有一个问题,我的idsrv cookie似乎永远不会有物理到期时间。因此共享计算机上的用户正在相互登录,因为 nobody 似乎关闭了他们的浏览器以杀死此cookie。
有人可以说明我应该做些什么吗?
答案 0 :(得分:1)
您需要使用持久性Cookie来设置过期时间,这会将cookie保留在浏览器会话上,但也允许您设置过期时间。你没有提到你正在使用哪个版本的ASP.NET,但这里是使用aspnet核心的一个例子(这里的第三个参数必须为true才能保留cookie):
var result =
await _signInManager.PasswordSignInAsync(model.Email, model.Password, true, true);
还有其他方式可以登录,但不管怎样,你都会有一个重载,允许你设置持久标志。
然后在其他地方你需要在设置cookie选项时设置到期时间,你可以指定到期时间,例如:如果使用Asp.Net Identity:
services.AddIdentity<ApplicationUser, IdentityRole>(
o => o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromMinutes(30));
(请记住,如果您处于核心状态,并且升级到或使用v2.0,则需要使用services.ConfigureApplicationCookie,请参阅here)。
当然,这可能无法消除您的用户在到期时间内交换机器,但您可以使到期时间变小。你还可以做的是在到期时使用SlidingExpiration标志:
SlidingExpiration设置为true,以指示中间件在处理到期时间超过到期时间的请求时,以新的到期时间重新发布新cookie。
意味着您可以减少到期时间,只要用户仍处于活动状态,他们就会获得新的Cookie。所以上面的代码可以调整为:
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
o.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromMinutes(10);
o.Cookies.ApplicationCookie.SlidingExpiration = true;
});