2017-09-15 263 views
1

我試圖獲得一個持久連接,所以用戶只需要使用一次他們的密碼。我使用過這個文檔:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x,但用戶在一段時間後仍然斷開連接。Asp.net核心持久身份驗證 - 自定義Cookie身份驗證

await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme, 
        principal, 
        new AuthenticationProperties 
        { 
         IsPersistent = true 
        }); 

我該怎麼做才能獲得真正持久的連接?

回答

1

根據文檔,IsPersistent授予的持久性僅意味着認證將通過瀏覽會話持續(即,即使瀏覽器關閉時也會保留)。您需要持久性的組合以設置Cookie的到期時間。可以通過使用ExpireTimeSpan選項通過CookieAuthenticationOptions (MSDN)設置cookie的到期日期。

沒有持久性,認證到期可以使用AuthenticationOptions的ExpiresUtc選項

+0

設置,好吧,我想試試。只是一件事,文檔說:ExpiresUtc和IsPersistent屬性是相互排斥的。這不就是說我不能同時使用兩者嗎? – GlobalFx

+0

@GlobalFx因此即使用戶沒有關閉瀏覽器,絕對到期(通過ExpiresUtc)也會拒絕設置的cookie。 _IsPersistent_表示用戶的身份驗證生命週期由CookieAuthenticationOptions決定。 設置isPersistent爲false意味着用戶只能通過當前瀏覽會話的身份驗證,瀏覽器關閉時會被清除。 –

+0

好的,所以解決方法是將_IsPersistent_設置爲true並將_ExpireTimeSpan_設置爲_ConfigureServices_中的一年,而不設置_ExpiresUtc_。用戶只需要每年登錄一次吧? – GlobalFx