2012-08-24 23 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