0

我正在为我的登录系统使用 Membership 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!这怎么可能?

4

1 回答 1

2

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

您可能希望将 cookie 到期与身份验证票证到期同步,或者将 cookie 设置为具有非常长的到期日期。

你需要做的是

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

  2. 使用FormsAuthentication.Encrypt()加密票证

  3. 手动将 cookie 添加到包含票证的 Response.Cookies 集合中。(而不是使用 get/setAuthCookie(),它使用 web.config 设置)。

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

于 2012-08-24T07:25:55.917 回答