如何在ASP .Net标识核心中为持久性和非持久性Cookie配置不同的ExpireTimeSpan
问题描述:
我有一个登录页面,记住我选项。我想配置记住我的cookie到期时间会比较长,比如说一个月。如何在ASP .Net标识核心中为持久性和非持久性Cookie配置不同的ExpireTimeSpan
我可以使用CookieAuthenticationOptions.ExpireTimeSpan
属性,但这对于RememberMe选项“仅”不起作用。
我希望在当前浏览会话(如果用户未选择“记住”选项)中登录几分钟(如登录后30分钟)。在这种情况下,我会使用ExpireTimeSpan = TimeSpan.FromMinutes(30)
。
有没有一种方法可以配置类似“RememberMeDuration”的配置两种不同的设置,当选择了RememberMe并且未选择时? - 开箱即用(至少不会为这种小功能创建全新的中间件)
答
绝对过期可用于实现记住我(例如30天)功能。 使用身份时,请在密码检查后在SignInAsync期间设置ExpiresUtc。
var au = new ApplicationUser() { Email = model.Email };
var r1 = await _userManager.CheckPasswordAsync(au, model.Password);
if (r1)
{
await _signInManager.SignInAsync(au, new AuthenticationProperties() { ExpiresUtc = DateTime.UtcNow.AddDays(30) });
}
如果使用不具有身份的Cookie中间件,则在定制密码检查成功后设置ExpiresUtc。
从文档:
await HttpContext.Authentication.SignInAsync(
"MyCookieMiddlewareInstance",
principal,
new AuthenticationProperties
{
ExpiresUtc = DateTime.UtcNow.AddDays(30)
});
IsPersistent和ExpiresUtc是互斥的
嗨bvoleti。感谢您使用CheckPasswordAsync和SignInAsync的解决方法。但是,如果我使用ExpiresUtc,我将失去IsPersistent,并因此导致滑动失效失效。 这将是我的最后一个选择,因为我想尝试一些可以让滑动过期保持活跃状态的东西。 –