2012-08-24 134 views
0

我爲我的登錄系統使用Membership API,一件奇怪的事情一直困擾着我。我允許用戶選擇是否「記住我」,這意味着是否要創建一個月有效期的持久cookie。如何正確創建ASP.NET Membership Cookie?

在Web.config,我寫道:

<authentication mode="Forms"> 
    <forms timeout="60" /> 
</authentication> 

這應該是60分鐘的默認會話cookie。

在登錄頁面的後臺代碼:

if(Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text)) 
     { 
      authCookie = FormsAuthentication.GetAuthCookie(UsernameTextBox.Text, RememberMeCheckBox.Checked); 
      if(RememberMeCheckBox.Checked) 
       authCookie.Expires = DateTime.Now.AddMonths(1); 
      Response.Cookies.Add(authCookie); 
      Response.Redirect(FormsAuthentication.GetRedirectUrl(UsernameTextBox.Text, RememberMeCheckBox.Checked)); 
     } 

結果卻是陌生的。我似乎創建了60分鐘的持久cookie!這怎麼可能?

回答

2

您正在將cookie過期時間設置爲1個月,但它包含的身份驗證票據尚未修改。它已從您的Web配置繼承了60分鐘的默認值。

您可能希望將cookie過期與身份驗證票證到期同步,或者將Cookie設置爲具有很長的到期日期。

你需要做的是

  1. 手動創建的FormsAuthenticationTicket實例並設置實例的 到期屬性。

  2. 使用FormsAuthentication.Encrypt()手動加密票

  3. 一個cookie添加到含票Response.Cookies集合。 (而不是使用get/setAuthCookie(),它使用 web.config設置)。

一些示例代碼位於FormsAuthentication.Encrypt()的文檔中。

+0

嗨,這是我的一個誤解的地獄!我相信很少有記錄,但應該經常需要。你是男人! – Aperture