2013-10-08 66 views
3

我想爲MVC網站實現非常基本的Asp.net表單身份驗證機制。我得到的問題是我的身份驗證cookie被設置爲在一年後過期,而我不希望它在這麼長時間後過期。下面是我的一些代碼:表單身份驗證Cookie不會過期

的web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2" /> 
</authentication> 

控制器

... 
FormsAuthentication.SetAuthCookie(username, false); 
... 

我發現這個answer(這個問題是相似的,但在我的情況下,超時不會發生),但這是唯一的方法來使cookie過期或我在這裏做錯了什麼?

當我認爲它設置在一年後到期,即使它應該在幾分鐘後過期餅乾,爲什麼呢?

我要的是莫名其妙的用戶會獲得一段時間後退出,我想設置屆滿forms標籤將做的工作?

+0

你可以發佈你的web.config嗎?特別是標籤 – lopezbertoni

+0

我沒有在配置 – sttaq

+0

成員提供商是一個必需的東西? – sttaq

回答

7

在找到解決方案後,差不多一個月,100次查看並且沒有答案。

首先,在web.config指定的超時工作,只有當cookie設置爲持續性,即永久性Cookie也可能過期。最初我錯誤地認爲持久cookie不能過期。事實上,如果我始終將cookie設置爲持久性,我的原始代碼就可以工作。

其次,我認爲沒有必要讓會員提供商按照上述評論中的建議進行表單身份驗證。

下面是如何我現在創建一個身份驗證cookie:

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, isPersistent); 
if (!isPersistent) 
{ 
    //this is because if it was not set then it got 
    //automatically set to expire next year even if 
    //the cookie was not set as persistent 
    authCookie.Expires = DateTime.Now.AddMinutes(15); 
} 

Response.Cookies.Add(authCookie); 

請讓我知道是否有任何替代這樣做呢?

+0

似乎這會起作用,但如果我們將slidingExpiration設置爲「true」,會發生什麼? – dmathisen

+0

你在哪裏添加此代碼? – usefulBee

+0

18個小時後,我的持久性設置爲true和過期30分鐘,cookie仍然有效。 –