ASP.NET Core MVC:设置身份cookie的到期时间

sev*_*rin 28 asp.net-mvc asp.net-identity asp.net-core-mvc asp.net-core

在我的ASP.NET Core MVC应用程序中,身份验证cookie的生命周期设置为"会话",因此它会一直持续到我关闭浏览器为止.我使用MVC的默认身份验证方案:

app.UseIdentity();
Run Code Online (Sandbox Code Playgroud)

如何延长cookie的生命周期?

use*_*696 42

您正在使用的ASP.NET Identity中间件是一些UseCookieAuthentication包含管道上的Cookie身份验证中间件的调用.这可以在GitHub上的Identity中间件的构建器扩展的源代码中看到.在这种情况下,配置基础Cookie身份验证应如何工作所需的选项IdentityOptions将在设置依赖项注入时封装在并配置.

实际上,查看我链接到您的源代码可以看到以下内容在您调用时运行app.UseIdentity():

var options = app.ApplicationServices.GetRequiredService<IOptions<IdentityOptions>>().Value;
app.UseCookieAuthentication(options.Cookies.ExternalCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorRememberMeCookie);
app.UseCookieAuthentication(options.Cookies.TwoFactorUserIdCookie);
app.UseCookieAuthentication(options.Cookies.ApplicationCookie);
return app;
Run Code Online (Sandbox Code Playgroud)

要设置IdentityOptions类,该AddIdentity<TUser, TRole>方法有一个重载版本,允许使用一个lambda配置选项.因此,您只需传入lambda来配置选项.在这种情况下,您只需访问Cookies选项类的属性并ApplicationCookie根据需要进行配置.要改变你做某事的时间跨度

services.AddIdentity<ApplicationUser, IdentityRole>(options => {

    options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);

});
Run Code Online (Sandbox Code Playgroud)

编辑:ExpireTimeSpan属性仅使用,如果在调用的时候HttpContext.Authentication.SignInAsync,我们传递的一个实例,AuthenticationPropertiesIsPersistent设置为true.

尝试只用Cookie身份验证中间件事实证明,这个工程:如果我们只需登录没有这个选项,我们得到了持续的会话cookie中,如果我们派了一起,我们得到配置时持续我们设置什么饼干中间件.

使用ASP.NET身份做的方式是传递参数isPersistentPasswordSignInAsync与价值true.这最终是要在通话SignInAsync中的HttpContext在通过AuthenticationPropertiesIsPersistent设置为true.电话最终会是这样的:

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
Run Code Online (Sandbox Code Playgroud)

RememberMe是,如果我们设置什么配置IsPersistent为true或false.


che*_*fly 11

对于2.0版本有一个答案,但它对我不起作用.我必须做:

services.ConfigureApplicationCookie(options =>
{
    options.ExpireTimeSpan = TimeSpan.FromDays(30);
});
Run Code Online (Sandbox Code Playgroud)

默认值为14天.

  • 它仍然不起作用,它设置了 cookie 的过期属性,但将 Expires 标头设置为 1/1/1970。 (2认同)

Ahm*_*bry 9

对于ASP.NET Core 2.0

  services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.Name = "CookieName";
            options.Cookie.Expiration = TimeSpan.FromDays(2);
        });
Run Code Online (Sandbox Code Playgroud)

  • 我还放置了`options.ExpireTimeSpan = TimeSpan.FromDays(2);` - 即使 MS 不断改变主意如何去做,其中之一也是正确的。 (2认同)

小智 7

在ASP.NET Core 2.0中,使用ExpireTimeSpan属性代替Cookie.Expiration。

services.ConfigureApplicationCookie(options =>
{   
    options.Cookie.Name = "CookieName";         
    options.ExpireTimeSpan = TimeSpan.FromHours(24);
    options.SlidingExpiration = true;               
});
Run Code Online (Sandbox Code Playgroud)

文档

Cookie.Expiration:获取或设置Cookie的寿命。当前,此选项禁止操作,并且在ASP.NET Core 2.1+中将不再使用。使用ExpireTimeSpan选项设置Cookie的到期时间。

  • 这不再是真的。这是有关v2.1 ExpireTimeSpan的文档摘录:TimeSpan,存储在cookie中的身份验证凭单将在此TimeSpan到期。将ExpireTimeSpan添加到当前时间以创建故障单的到期时间。ExpiredTimeSpan值始终进入服务器验证的加密AuthTicket中。它也可以进入Set-Cookie标头,但前提是设置了IsPersistent。要将IsPersistent设置为true,请配置传递给SignInAsync的AuthenticationProperties。ExpireTimeSpan的默认值为14天。 (2认同)