Cookies IE8在弹出窗口中丢失会话cookie
我们有一个ASP.NET应用程序,它使用Forms Auth。当用户登录时,将生成会话ID cookie和表单身份验证票证(存储为cookie)。这些是会话cookie,不是永久cookie。当浏览器关闭时,用户可以有效地注销,这是有意且可取的 用户登录后,将使用Cookies IE8在弹出窗口中丢失会话cookie,cookies,internet-explorer-8,popup,Cookies,Internet Explorer 8,Popup,我们有一个ASP.NET应用程序,它使用Forms Auth。当用户登录时,将生成会话ID cookie和表单身份验证票证(存储为cookie)。这些是会话cookie,不是永久cookie。当浏览器关闭时,用户可以有效地注销,这是有意且可取的 用户登录后,将使用window.open('location here')弹出一个新窗口。打开的页面实际上是用户在剩余会话中工作的工作区。在此页面中,还使用其他弹出窗口 最近,我们有很多客户(都使用最新版本的IE8)抱怨说,当他们登录时,最初的弹出窗口会
window.open('location here')弹出一个新窗口代码>。打开的页面实际上是用户在剩余会话中工作的工作区。在此页面中,还使用其他弹出窗口
最近,我们有很多客户(都使用最新版本的IE8)抱怨说,当他们登录时,最初的弹出窗口会将他们带回登录屏幕,而不是主页。或者,用户有时可以登录,进入主页(同样,主页位于一个新的弹出窗口中),一切看起来都很好,直到创建了任何其他弹出窗口,并开始再次将他们重定向到登录屏幕
在尝试解决问题时,我使用了好的老提琴手。当问题开始显现时,我注意到浏览器没有发送ASP.NET会话ID会话cookie或Forms Auth ticket会话cookie,即使对登录帖子的响应显然会推下这些cookie
更奇怪的是,如果我按CTRL+N从弹出的窗口中打开一个新窗口,该窗口缺少会话cookie,然后手动键入主页的URL,这些cookie就会神奇地再次出现。但是,随后的window.open()代码>呼叫将继续中断,不会发送会话cookie并将用户带到登录屏幕
需要注意的是,有时,由于似乎没有什么好的理由,这些用户可以突然登录并正常工作一段时间,然后又恢复到故障状态
现在,我已经确保没有浏览器加载项、插件、工具栏等正在运行。我已将我们的站点添加为受信任站点,并将安全设置降至低,我已将Cookie隐私策略修改为“全部接受”,甚至禁用了自动策略设置,手动强制其接受所有内容并包含会话Cookie。似乎没有任何影响
还要注意,web应用程序驻留在单个服务器上。没有负载平衡、web花园、服务器场、集群等。服务器确实位于ISA服务器后面,但除此之外,它非常简单
我已经搜索了好几天了,还没有找到任何可行的方法。见鬼,有时候我甚至不能可靠地复制它。我发现一些人也有同样的问题,但他们似乎是在引用一个据称在beta版或RC版中修复的问题(例如:)。这些是IE的发布版本,带有最新的补丁
我知道我可以尝试设置永久cookies而不是会话cookies。然而,这对我们的应用程序具有重大的安全影响
更新
当用户被添加为机器上的本地管理员时,问题似乎自动消失了。只有时间才能证明这种变化是否会永久(积极)影响这个问题
是时候抛出ProcMon,看看是否存在资源访问问题了
更新#2
似乎对于一个似乎是单一问题的问题有多个角度。我很久以前就报告过,让用户成为本地管理员似乎有帮助。它确实做到了,对许多用户来说。当然,这不是一个真正的解决方案,但它确实让我们步履蹒跚
然后更多的用户开始报告这个问题,而管理员修复程序也帮不上忙。用户似乎大多是Win7,但Vista也受到了影响。它们似乎也大多是64位安装
正如下面一些成员所建议的那样,将TabProcGrowth设置为0或1(两者都有效)似乎在很大程度上解决了这个问题。所以,我将把我接受的答案转移到第一个提出这个建议的人身上,因为它的影响要大得多
这是一个令人难以置信的令人沮丧的问题,因为它很难重现,并且经常发生在我没有直接联系的用户身上,或者在我找到他们时,它似乎不起作用。我所能说的是,会话合并功能有问题,但我没有太多数据可以提供给Microsoft以找到永久性修复。这背后有多种可能性-
- (不得不突然出现!!)。具体来说,寻找受保护的模式行为
- 这可能是一个实际的问题。更重要的是,通过Ctrl+N快捷方式打开一个新窗口会使cookie在您的案例中神奇地发送
- IE的旧版本存在问题(我知道您已经声明您的客户正在使用最新版本)。您可能需要查看Microsoft Connect上的详细信息,以获取bug ID和
我从IE 5就知道这个问题,所以我只在模式弹出窗口中使用会话变量。。。
当我打开一个非模式弹出窗口时,我用ASP.NET缓存和新对象集合替换所有会话变量。。。
但这很烦人
其他浏览器(如Firefox)没有这个问题…这是IE8中的“新”功能
查看下面的IE8博客来了解它
IE8可以使用多个进程来处理x个IE窗口。当您跨越一个进程空间时,您会丢失cookie(Asp.Net会话ID似乎保留在此进程边界上)
我个人认为它坏了或者是个虫子。正如我们所知,当浏览到“同一域目标”时,应该维护并重新发送cookies。IE8具有不同的安全处理行为。。伟大的在我看来,它的行为很糟糕,“即使在另一个窗口中访问同一目标域,也会丢弃cookies”只是一个bug
您可以通过internet e修改IE8使用的进程数