2012-01-13 86 views
15

我正在使用ASP.NET MVC 3,使用表單身份驗證(根據您使用file-> new獲得的修改後的vanilla帳戶代碼)。爲什麼我的ASP.NET MVC持久授權cookie不起作用?

登錄時,我設置的權威性的cookie

FormsAuthentication.SetAuthCookie(userName, true); 

所以這應該設置一個永久性的Cookie。但是,如果我關閉瀏覽器並重新打開,當我瀏覽到該網站時,我不得不再次登錄!我可以看到使用chrome dev工具創建cookie(.ASPXAUTH),並且在關閉瀏覽器時不會被刪除,那麼發生了什麼?

我的web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="10000"/> 
</authentication> 

我在本地測試這個,IIS下如果有什麼差別。

+1

你可以檢查這個答案:http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl 2012-01-13 14:51:40

+2

好吧,這個鏈接似乎爲我排序 - 堅持用SetAuthCookie並調整我的配置以顯式設置cookie名稱(在web.confg中),並且所有工作都正在進行中。奇怪的! – 2012-01-13 15:20:16

+0

@Matt Roberts - 我不知道爲什麼,但設置cookie名稱也爲我解決了這個問題。你會認爲它只適用於特定領域的cookie等。這是一個錯誤在MVC或.NET也許? – Greg 2012-05-04 22:38:44

回答

3

從評論從解決@alexl:

您可以檢查這個答案:Making user login persistant with ASP .Net Membership

好吧,這個鏈接似乎對它進行排序,我 - 與SetAuthCookie堅持和調整我的配置明確設置cookie的名稱(在web.confg中),現在所有工作都在進行中。奇怪的! -

8

我最好使用身份驗證票據創建自己的cookie。 SetAuthCookie在引擎蓋下創建一個驗證票。您是否嘗試製作自己的身份驗證票?它將讓你存儲額外的數據

下面是一個例子:

// create encryption cookie   
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
     userName, 
     DateTime.Now, 
     DateTime.Now.AddDays(90), 
     createPersistentCookie, 
     string.Empty); 

// add cookie to response stream   
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
if (authTicket.IsPersistent) 
{  
     authCookie.Expires = authTicket.Expiration; 
} 
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 

希望這有助於。

+0

謝謝。所以我根本不應該使用SetAuthCookie? MSDN文檔告訴我使用它來創建一個可以持久化的auth cookie。另外,新MVC應用程序的香草代碼使用SetAuthCookie - 是否有錯? – 2012-01-13 14:54:23

+0

SetAuthCookie()在全局上做同樣的事情。這很奇怪,因爲它似乎一直不工作。我更喜歡創建身份驗證票據的myslef並將其添加到響應流中。 – 2012-01-13 15:01:34

+0

請檢查鏈接@alexl作爲您的問題的評論發佈。 – 2012-01-13 15:07:34