2014-02-28 85 views
0

我不知道如何形成身份驗證。但我認爲它只是基於表單身份驗證超時創建cookie。動態地擴展表單身份驗證超時

因此,鑑於我試圖增加表單身份驗證cookie基於一些頭髮送到服務器過期。爲此,我禁用了slidingExpiration以便自行計算到期日。

Application_BeginRequest我做:

if (!bypassSlidingExpiration) 
{ 
    var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
    authCookie.Expires = DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes); 
    Response.Cookies.Add(authCookie); 
} 

但不管bypassSlidingExpirationFormsAuthentication.Timeout後,我的會話過期。

我在這裏錯了什麼?

回答

0

你在做其他代碼分支?看起來您只處理bypassSlidingExpiration爲假的情況。如果bypassSlidingExpiration爲真,那麼您將採用默認值(30分鐘,或任何在web.config中指定的或以編程方式指定的值)。

您可以考慮使用FormsAuthentication.SetAuthCookie(username, true)來繞過滑動過期。第二個參數是cookie是否應該持久化。最好避免手動操作cookie。如果由於某種原因,你必須,這樣的事情可能工作:

if (bypassSlidingExpiration) 
{ 
    var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
    authCookie.Expires = DateTime.MaxValue; 
    Response.Cookies.Add(authCookie); 
} 
+1

不幸的是,在所有情況01/01/0001作品非常奇怪authCookie.Expires 00:00:00但是我設置的是價值,我希望在Application_EndRequest中返回到瀏覽器正確的值。不過,我有案例,我不需要延長到期時間,但在這些情況下,Cookie每30秒延長一次 – Vladimirs

+0

@Vladimirs嘗試將更新後的Cookie添加到響應中,而不是請求中。看到我的答案編輯。 –

+0

我更新問題。經過一些嘗試,我發現並替換它在我的代碼(但忘記更新問題),但它仍然無法按預期工作。最好的辦法是一直爲Expires字段分配一些值,因爲有時它會在某處被覆蓋。只有當我解密那張票後,我才能得到適當的日期。 – Vladimirs