Sha*_*lez 10 asp.net authentication cookies session persistent
浏览器关闭后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: 我正在更改标题和标签以包含会话,因为它证明与问题/解决方案相关
Sha*_*lez 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);
Run Code Online (Sandbox Code Playgroud)
现在,当浏览器再次打开时,会话被正确识别并恢复用户会话.
归档时间: |
|
查看次数: |
15156 次 |
最近记录: |