浏览器关闭后删除身份验证/会话cookie

时间:2010-06-23 13:54:33

标签: asp.net authentication session cookies persistent

关闭浏览器后Cookie会保留的确切步骤是什么?目前我有:

  1. createPersistentCookietrue事件中设置为LoggedIn
  2. 指定了MachineKey。
  3. 将表格滑动过期设置为true
  4. 只要浏览器处于打开状态,用户就会保持登录状态,但一旦关闭,并且无关紧要,用户将需要再次登录。我错过了什么?

    修改: 我浏览了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具有01/01/0001的Expires属性。我想也许这就是问题所在?任何想法都将不胜感激。

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

2 个答案:

答案 0 :(得分:10)

所以我最终找到了解决方案。事实证明,这不是身份验证cookie的问题(它被正确保留,或者更确切地说,如果处理程序没有删除它,错误地决定用户没有登录基于缺席的会议)。问题是Session 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);

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

答案 1 :(得分:0)

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

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