10

浏览器关闭后 cookie 持续存在所需的具体步骤是什么?目前我有:

  1. createPersistentCookie设置为true事件LoggedIn
  2. 指定的机器密钥。
  3. 表单滑动到期设置为true.

只要浏览器打开,用户就会保持登录状态,但一旦关闭,不管多久,用户都需要重新登录。我错过了什么?

编辑: 我浏览了 marapet 指出的文章(见下面的评论),它让我对这张票是否确实有 IsPersistent 标志感兴趣,它确实有。解密后的票据是这样的: System.Web.Security.FormsAuthentication.Decrypt(Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName].Value) {System.Web.Security.FormsAuthenticationTicket} CookiePath: "/" Expiration: {19/08/2010 17:27:14} Expired: false IsPersistent: true IssueDate: {19/07/2010 17:27:14} Name: "alex" UserData: "" Version: 2 所有的细节都是正确的,和我在 LoggedIn 事件中设置的相对应。更多的 cookie 值我可以直接从 cookie 中检索,与这个相同。然而,一旦我关闭浏览器,cookie 就会丢失。

然而,我注意到的是,携带票的 cookie 出于某种原因重置了日期。首先,我无法覆盖 web.config 中的设置,因此在 LoggedIn 事件结束时,它的 Expires 属性是发布日期后 4000 分钟,而不是我以编程方式设置的月份。然后在页面加载后,我使用 FormsAuthentication.FormsCookieName 检索的 cookie 的 Expires 属性为 01/01/0001。我想也许这就是问题所在?任何想法将不胜感激。

编辑#2: 我正在更改标题和标签以包含会话,因为它与问题/解决方案相关

4

2 回答 2

10

所以我最终找到了解决方案。事实证明,这不是身份验证 cookie 本身的问题(它被正确保留,或者更确切地说,如果处理程序没有删除它,错误地决定用户没有登录基于缺失的会话)。问题是会话 cookie 丢失了,或者没有正确识别。所以解决方法是在登录期间手动添加会话 cookie,如下所示:

HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID);
authCookie.Domain = ".mydomain.com";
authCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(authCookie);

现在,当浏览器再次打开时,会话被正确识别并恢复用户会话。

于 2010-07-21T10:59:10.123 回答
0

当浏览器关闭时,不应丢弃持久表单身份验证 cookie。它对 web.config 中定义的超时值保持有效。

但是,可以将某些浏览器配置为在会话结束时丢弃所有 cookie - 您可能需要检查浏览器的设置(FireFox:工具 - 选项 - 隐私)。

于 2010-06-23T19:04:16.937 回答