如何正确创建ASP.NET Membership cookie?

时间:2012-08-24 06:56:54

标签: asp.net

我正在使用会员API作为我的登录系统,一个奇怪的事情一直困扰着我。我允许用户选择是否“记住我”,这意味着是否创建一个有效期为一个月的持久性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!这怎么可能?

1 个答案:

答案 0 :(得分:2)

您将Cookie到期时间设置为1个月,但其中包含的身份验证票证尚未修改。它已从您的Web配置继承了默认值60分钟。

您可能希望将Cookie过期与身份验证票证过期同步,或者将Cookie设置为具有很长的过期日期。

您需要做的是

  1. 手动创建FormsAuthenticationTicket实例并设置 实例的到期属性。

  2. 使用FormsAuthentication.Encrypt()加密故障单

  3. 手动将Cookie添加到包含故障单的Response.Cookies集合中。 (而不是使用get / setAuthCookie()) web.config设置)。

  4. 一些示例代码位于FormsAuthentication.Encrypt()的文档中。