【发布时间】:2011-01-13 14:23:35
【问题描述】:
我有一个 ASP.NET 2.0 站点,它在会话中存储用户 ID 以指示他们已登录。在某些情况下,用户似乎没有保持登录状态。我一直在监视 Fiddler 中的流量,以及我发现的一些细节:
- 在我的旧笔记本电脑上运行 IE7 和项目经理的笔记本电脑运行 IE7 时,该问题 100% 可重复。我当前运行 IE7 的笔记本电脑或任何运行 FF 的笔记本电脑都不会出现此问题。
- 问题仅出现在生产中,而不是在开发、内部登台或客户端登台中。生产环境是唯一的负载平衡环境,但上面提到的可重复性让我怀疑负载平衡是一个因素。
- 当设置 Session("ID") = 1 的页面将响应发送回客户端时,我可以在所有情况下看到“Set-Cookie”标头,它正在创建 ASP.Net_Session_Id cookie(它是 HttpOnly )。
- 对服务器的后续请求将在没有出现问题的机器上发送该 cookie 的标头,但不会在出现问题的机器上发送,因此要么 cookie 被删除,要么“Set-Cookie”标头被忽略。
- 登录的工作方式如下:www.DomainX.com 上的页面有一个 iframe。该 iframe 的来源是 login.DomainY.com 上的一个页面。 login.DomainY.com 提供的各种页面引导用户完成登录/注册过程。 login.DomainY.com 的最后一步是重定向到 www.DomainX.com 上的页面,包括查询字符串中的用户 ID。 www.DomainX.com 上的这个页面通常将 ID 存储在 session 中,然后运行一些 JS 将顶级文档重定向到新页面,从而将用户带出 iframe。这是一个已经工作了几年的过程,具有 DomainX.com 的几个价值。这里可能不同的一件事是,在这种情况下,JS 只是破坏了 iframe 和一些包含 div 的内容。
- 我在 Google Analytics cookie 中发现问题发生和未发生的情况之间的另一个区别。 login.DomainY.com/FinalStep.aspx 在 iframe 中重定向到 www.DomainX.com/SaveTheID.aspx 时会有所不同。当问题未发生时,SaveTheID.aspx 请求包括各种 Google Analytics cookie(__utma、__utmz 等)。当问题确实发生时,此请求不包括所有 GA cookie(它缺少 __utma、__utmz 和 __utmb)。
- 生产环境是 login.DomainY.com 在 SSL 下运行的唯一环境,所以我认为这可能是相关的。但我们暂时将 login.DomainY.com 的临时副本设置为使用 SSL,但没有任何效果。
有什么可能导致这种情况的想法吗?
编辑:生产环境有 www.DomainX.com 和 DomainX.com 的域。还有另一个已知问题是没有为这两个域设置 cookie。这可能是相关的,但在该修复程序进入生产阶段之前我将无法进行测试。
【问题讨论】:
-
您是否使用 Fiddler 查看过网络流量 - fiddler2.com - 它是查看服务器和浏览器之间发送的流量(包括 cookie 等)的好工具,并且可以配置为解密HTTPS 流量?
-
是的,我一直在这样做; Fiddler 是我目前所知道的主要信息来源。不过,谢谢。
标签: asp.net internet-explorer session cookies