浏览器关闭后 cookie 继续存在需要哪些具体步骤?目前我有:
-
createPersistentCookie
set to true
on LoggedIn
event.
- 指定机器密钥。
- 表单滑动过期设置为
true
.
只要浏览器打开,用户就会保持登录状态,但一旦关闭,无论多长时间,用户都需要再次登录。我缺少什么?
EDIT:我浏览了 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。我想也许这就是问题所在?任何想法将不胜感激。
EDIT#2:我正在更改标题和标签以包含会话,因为它与问题/解决方案相关
所以我最终找到了解决方案。事实证明,这不是身份验证 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);
现在,当浏览器再次打开时,会话将被正确识别并恢复用户会话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)