关闭浏览器后Cookie会保留的确切步骤是什么?目前我有:
createPersistentCookie
在true
事件中设置为LoggedIn
。 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具有01/01/0001的Expires属性。我想也许这就是问题所在?任何想法都将不胜感激。
修改#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:工具 - 选项 - 隐私)。