在我的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