在我的ASP.NET Core MVC应用程序中,身份验证cookie的生存期被设置为'Session',因此它会持续到关闭浏览器为止。 我用缺省的认证方案为MVC:ASP.NET Core MVC:设置身份cookie到期
app.UseIdentity();
如何延长cookie的寿命是多少?
在我的ASP.NET Core MVC应用程序中,身份验证cookie的生存期被设置为'Session',因此它会持续到关闭浏览器为止。 我用缺省的认证方案为MVC:ASP.NET Core MVC:设置身份cookie到期
app.UseIdentity();
如何延长cookie的寿命是多少?
您正在使用ASP.NET身份中间件是身边的一些呼叫wraper到UseCookieAuthentication
,其中包括管道上的Cookie身份验证的中间件。这可以在Identity中间件here on GitHub的构建器扩展的源代码中看到。在这种情况下,配置底层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;
要设置IdentityOptions
类中,AddIdentity<TUser, TRole>
方法有一个重载版本,它允许用一个lambda配置选项。因此,您只需传入一个lambda来配置选项。在这种情况下,您只需访问选项类别的Cookies
属性并根据需要配置ApplicationCookie
。要改变你做的东西的时间跨度像
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(1);
});
编辑:仅用于的ExpireTimeSpan
财产,如果调用HttpContext.Authentication.SignInAsync
,当我们在AuthenticationProperties
的实例与IsPersistent
集传递给true
。
刚刚尝试使用Cookie身份验证中间件,事实证明这起作用:如果我们只是在没有此选项的情况下登录,我们会得到一个持续用于会话的cookie,如果我们一起发送,我们会得到一个cookie,我们在配置中间件时进行设置。
使用ASP.NET Identity的方法是将PasswordSignInAsync
的参数isPersistent
与值true
一起传递。这最终将通过AuthenticationProperties
中的HttpContext
的SignInAsync
调用,IsPersistent
设置为true。通话结束是这样的:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
凡RememberMe
是,如果我们设置IsPersistent
为true或false什么配置。
尝试
app.UseIdentity().UseCookieAuthentication(
new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(1)
}
);
我试过了,用其他选项,但似乎被忽略。 –
出于某种原因,我使用SignInAsync([..], true)
当饼干从未在浏览器中显示(与正常登录失败)有问题:
所以,我尝试添加了UTC时区差成ExpireTimeSpan
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
// add TimeSpan with 5 minutes plus timezone difference from Utc time
o.Cookies.ApplicationCookie.ExpireTimeSpan = DateTime.Now.Subtract(DateTime.UtcNow).Add(TimeSpan.FromMinutes(5));
});
Voila!它的工作原理和cookie仅在浏览器中以+ 5min过期显示。
参照通知到github.com https://github.com/aspnet/Identity/issues/766#issuecomment-253237576
对于ASP.NET核2.0
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "CookieName";
options.Cookie.Expiration = TimeSpan.FromDays(2);
});
有2.0版本的答案,但它并没有为我工作。我不得不这样做:
services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(30);
});
的默认值是14天。
在ASP.NET Core 2.0中,使用ExpireTimeSpan属性而不是Cookie.Expiration。
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "CookieName";
options.ExpireTimeSpan = TimeSpan.FromHours(24);
options.SlidingExpiration = true;
});
从docs:
Cookie.Expiration:获取或设置cookie的寿命。目前,这个选项不可用,并且将在ASP.NET Core 2.1+中过时。使用ExpireTimeSpan选项来设置Cookie到期。
谢谢,使用此方法,我可以使用此方法更改cookie的名称,但即使设置了ExpireTimeSpan,auth cookie的生命周期也会设置为“会话”。 任何想法为什么? 这是我的Startup.cs:https://github.com/severisv/MyTeam/blob/master/src/MyTeam/Startup.cs 我试过禁用Facebook-auth。我没有使用https。 – severin
@fiskeboss我添加了一个关于我在这件事上发现的内容的编辑。 – user1620696
啊,当然,谢谢! – severin