【发布时间】:2009-08-24 19:15:18
【问题描述】:
我们有一个使用 Forms Auth 的 ASP.NET 应用程序。当用户登录时,会生成一个会话 ID cookie 和一个 Forms Auth 票证(存储为 cookie)。这些是会话 cookie,而不是永久 cookie。当浏览器关闭时,用户被有效地注销是有意和可取的。
一旦用户登录,就会弹出一个使用window.open('location here'); 的新窗口。打开的页面实际上是用户在其余会话期间工作的工作区。在此页面中,还使用了其他弹出窗口。
最近,我们有一些客户(都使用最新版本的 IE8)抱怨当他们登录时,最初的弹出窗口会将他们带回登录屏幕而不是他们的主页。或者,用户有时可以登录,进入主页(这又是在一个新的弹出窗口中),一切似乎都很好,直到创建任何其他弹出窗口,它开始将它们重定向到登录屏幕再次。
在尝试解决问题时,我使用了老 Fiddler。当问题开始显现时,我注意到浏览器没有发送 ASP.NET 会话 ID 会话 cookie 或 Forms Auth 票证会话 cookie,即使对 POST 中的日志的响应清楚地推低了这些 cookie。
更奇怪的是,如果我 CTRL+N 从缺少会话 cookie 的弹出窗口中打开一个新窗口,然后手动输入主页的 URL,这些 cookie 又神奇地出现了。但是,后续的 window.open(); 调用将继续中断,不会发送会话 cookie 并将用户带到登录屏幕。
请务必注意,有时,这些用户可能会突然登录并正常工作一段时间,但似乎没有什么充分的理由,然后又回到故障状态。
现在,我已确保没有浏览器加载项、插件、工具栏等正在运行。我已将我们的站点添加为受信任站点并将安全设置降至低,我已将 Cookie 隐私策略修改为“全部接受”,甚至禁用了自动策略设置,手动强制它接受所有内容并包含会话 cookie。似乎没有任何影响。
另请注意,Web 应用程序驻留在单个服务器上。没有负载平衡、网络花园、服务器场、集群等。服务器确实驻留在 ISA 服务器后面,但除此之外它非常简单。
我已经搜索了几天,但没有找到任何可行的方法。哎呀,有时我什至无法可靠地复制它。我发现了一些关于有同样问题的人的引用,但他们似乎引用了一个据称在 beta 或 RC 版本中修复的问题(例如:IE8 loses cookies when opening a new window after a redirect)。这些是 IE 的发布版本,带有最新的补丁。
我知道我可以尝试设置永久 cookie 而不是会话 cookie。但是,这对我们的应用程序具有严重的安全隐患。
更新
当用户被添加为机器上的本地管理员时,问题似乎自动消失了。只有时间才能证明这种变化是否会永久(和积极地)影响这个问题。
是时候破坏 ProcMon 并查看是否存在资源访问问题。
更新 #2
对于看似单一的问题,似乎有多个角度。我很久以前报告说,让用户成为本地管理员似乎有帮助。对于许多用户来说,它确实如此。当然,这并不是真正的解决方案,但它确实让我们步履蹒跚。
然后更多的用户开始报告这个问题,而管理员修复没有帮助。用户似乎主要是Win7,但Vista也受到了影响。它们似乎也主要是 64 位安装。
按照下面一些成员的建议,将 TabProcGrowth 设置为 0 或 1(两者都有效)似乎在很大程度上解决了这个问题。因此,我将把我接受的答案转移给第一个提出该建议的人,因为它的影响要大得多。
这是一个非常令人沮丧的尝试解决的问题,因为它很难重现并且经常发生在我没有直接沟通的用户身上,或者当我找到他们时它似乎没有在职的。我只能说会话合并功能有问题,但我没有太多数据可以提供给 Microsoft 以找到永久修复。
【问题讨论】:
-
有没有人找到真正的解决方案?我们的测试已确定这特定于 64 位机器上的 IE8。 32 位机器上的 IE8 可以在这种情况下正常工作。在 64 位机器上尝试了 32 位和 64 位版本的 IE8,它们都有同样的问题。测试是使用 Windows Server 2008 标准版完成的。谢谢,丹麦
-
我仍然遇到这个问题。好痛
-
如果您打开带有 target="_blank" 的链接,这似乎也会发生。微软是一堆[由于极端语言而自我审查的其余评论]
-
@MadHalfling 你知道有什么变通办法吗?除了 _blank 是否允许跨窗口传播 cookie 之外,还有其他方法可以打开新窗口吗?
-
@CydeWeys AFAIK 除了更改阈值的注册表设置外,没有其他解决方法。有关更多详细信息,请参阅已接受答案的链接 - 它超出了 innept
标签: cookies internet-explorer-8 popup