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

Sha*_*lez 10 asp.net authentication cookies session persistent

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

  1. createPersistentCookie设置为trueLoggedIn事件.
  2. MachineKey指定.
  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具有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)

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

  • 这也解决了我的问题.如果您遗漏域,则客户端浏览器会将其默认为当前域. (2认同)