2012-08-06 66 views
4

我正在生成一個FormsAuthentication權證,並將其存儲在一個cookie中,我使用MVC AuthorizeAttribute來提供授權。現在,我已經知道了,如果我有一個「保持登錄狀態」複選框選中,Cookie不會過期(我只是將cookie.expires更改爲現在+ 1年,出於測試目的,已經檢查了保持登錄狀態)。如何使用表單身份驗證來提供保留登錄功能?

但是,即使我設置cookie在創建票證時是持久性的,票據在超時期限後仍然停止工作。

下面的代碼,我創建AuthTicket:

var now = DateTime.UtcNow.ToLocalTime(); 
FormsAuthenticationTicket authTicket = new System.Web.Security.FormsAuthenticationTicket(1, username, now, now.Add(FormsAuthentication.Timeout), rememberMe, username, FormsAuthentication.FormsCookiePath); 
string encryptedTicket = System.Web.Security.FormsAuthentication.Encrypt(authTicket); 
return encryptedTicket; 

這是我設置爲一個cookie相同的encryptedTicket。任何人都知道我可以如何讓這張票在FormsAuthentication超時之後被允許?我是否必須手動處理FormsAuthentication Timeout時間?

+0

你就不能使用'FormsAuthentication.SetAuthCookie'?你真的需要創建自己的?持久性cookie並不意味着它將永遠持續,它將持續在瀏覽器會話之間。 – LukLed 2012-08-06 21:10:55

+0

我需要自己創建,因爲我也可以從移動應用程序訪問此日誌,並且應用程序存儲加密的故障單,並在獲取數據時將其作爲請求的一部分傳入。 也許我剛剛誤解了持久性對認證票的作用。它有什麼作用嗎? – 2012-08-06 21:29:19

回答

3

Cookie粘附的時間量與登錄保持有效的時間不同。基本上,持久性Cookie是'這個cookie在瀏覽器關閉後應該繼續存在',並且獨立於此登錄有效期多長時間。您可以使用它來存儲實例的用戶名,以便用戶在返回時不必重新輸入此信息。

如果cookie有效,但登錄已在cookie內過期,則需要重新登錄。如果您希望您的登錄時間更長,則需要延長web.config中<forms>標記的時間,或者您可以使用代碼執行此操作,但如果要延長/縮短過期時間,則需要重新編譯。

這裏有一些網站解釋遠一點有關這些概念:

http://software-security.sans.org/blog/2012/04/05/forms-authentication-remember-me-its-hard-not-too

Cookie Confusion with FormsAuthentication.SetAuthCookie() Method

+0

哦,明白了。基本上,我只是誤解了它做了什麼。謝謝。你知道isPersistent是否對實際授權票據做任何事情,因爲我自己處理了Cookie創建? – 2012-08-07 19:09:35

+0

不是我的理解。 isPersistent隻影響作爲auth票證容器的cookie。 – Tommy 2012-08-07 19:10:10