1

我有一个使用 FormsAuthentication 的登录系统,由于某种原因在关闭和打开浏览器时将我注销。这是我设置登录代码的方式:

            FormsAuthenticationTicket ticket;

                ticket = new FormsAuthenticationTicket(1, tbUsername.Text, DateTime.Now, DateTime.Now.AddYears(1), true, string.Empty, FormsAuthentication.FormsCookiePath);

            string encryptedTicket = FormsAuthentication.Encrypt(ticket);

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            cookie.HttpOnly = true;

            //Add the cookie to the request
            Context.Response.Cookies.Add(cookie);

如您所见,我已将 cookie 设置为跨会话持久。这是我的 web.config 部分:

<authentication mode="Forms">
  <forms slidingExpiration="false" loginUrl="~/Login.aspx" name="BOIGAUTH" defaultUrl="~/Admin/Settings.aspx"/>
</authentication>

此外,在此特定应用程序上禁用了 SessionState。有谁知道出了什么问题?

顺便说一句,即使我没有与网站交互,让应用程序浏览器打开超过 2 小时也让我保持登录状态。cookie 仅在关闭浏览器时丢失。

4

1 回答 1

5

如果您没有在 cookie 上设置过期时间,它将是仅浏览器会话 cookie,并在您关闭所有浏览器实例后消失。

您需要在 cookie 上设置一些过期时间,以使其与Expires属性保持一致。

HttpCookie cookie = new HttpCookie(
   FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
cookie.Expires = DateTime.Now.AddMinutes(1000);

旁注:确保您的浏览器未配置为在关闭时清除所有 cookie。

于 2012-11-28T19:39:21.797 回答