IE8丢失会话cookie在弹出窗口中(IE8 losing session cookies in

2019-06-18 20:33发布

我们有一个使用窗体身份验证的ASP.NET应用程序。 当用户登录时,产生一个会话ID cookie和窗体身份验证票(存储作为cookie)。 这些都是会话cookie,而不是永久的cookie。 这是故意的,希望在浏览器关闭时,用户有效地退出。

一旦一个用户登录时,一个新的窗口弹出时使用window.open('location here'); 。 在打开的页面是有效的用户在他们的会话的其余部分工作在工作区。 在该页面中,还可以使用其它的弹出窗口。

最近,我们已经有一些客户的抱怨,当他们登录,初始的弹出需要他们回到登录屏幕,而不是他们的网页(IE8的全部采用最新版本)。 或者,用户有时可以登录,进入网页(这又是一个新的弹出窗口),而这一切似乎好,直到创建任何其他的弹出窗口,在那里它开始将其重定向到登录屏幕再次。

在试图解决这个问题,我用好老提琴手。 当问题开始显现,我注意到,浏览器不发送了ASP.NET会话ID会话cookie或窗体身份验证票证会话cookie,即使到日志中,POST响应清楚推下这些cookie。

更重要的是奇怪的是,如果我CTRL + N打开从缺少会话cookie在弹出的窗口中一个新的窗口,然后手动将URL的主页类型,这些Cookie神奇地再次出现。 然而,随后的window.open(); 呼叫将继续被打破,不发送会话cookie,并采取用户在登录屏幕。

需要注意的是,有时,看似为没有很好的理由,这些相同的用户可以突然登录并一会儿正常工作是非常重要的,那么它可以追溯到打破。

现在,我已经确保有没有浏览器插件,插件,工具栏等正在运行。 我已经添加了我们的网站为可信站点和丢弃的安全设置为低,我已经修改了Cookie隐私政策“照单全收”,甚至禁用自动策略设置,手动迫使它接受一切,包括会话cookie。 好像没有任何影响它。

另外要注意的web应用程序驻留在一台服务器上。 没有负载均衡,Web园,服务器群,集群等,服务器将驻留在ISA服务器后面,但比其他,它是非常直截了当。

我一直在寻找各地的天,没有发现任何可行的。 哎呀,有时我甚至无法可靠地重现它。 我发现有同样的问题的人一些参考,但它们似乎是引用据称固定在测试版或RC版本中的问题(例如: IE8重定向之后打开新窗口时丢失饼干 )。 这些都是IE的发布版本,最多最新补丁。

我知道,我可以尝试设置永久性的Cookie,而不是会话cookie。 然而,这对我们的应用急剧安全隐患。

更新

看来,问题自动地消失,当用户添加为机上的本地管理员。 只有时间才能告诉我们,如果这种改变永久(和积极的)影响这个问题。

时间出局procmon中,看看是否有资源访问的问题。

更新#2

它似乎还有多个角度这似乎是一个单一的问题。 我不久前报道,使本地管理员似乎帮助用户。 它做到了,对于一些用户。 当然,这不是一个真正的解决方案,但它确实让我们一起蹒跚。

然后,更多的用户开始报告的问题,管理员修复并没有帮助。 用户似乎主要是Win7的,但Vista中也受到影响。 他们似乎也大多是64位安装。

在TabProcGrowth设置为0或1(或工作)在有些委员建议下面似乎有很大程度上解决这一问题。 所以,我要我接受的答案移动到该建议的第一人,由于它已经有显著的影响更大。

这是一个非常令人沮丧的问题来试图解决,因为它很难再现,经常与我没有直接沟通,或者通过时间我去他们似乎没有奏效用户发生。 我可以说的东西是不正确的与会话合并功能,但我没有太多的资料提供给微软找到一个永久性的修复。

Answer 1:

这是IE8中的“新”功能!

Checkj了IE8博客下面来了解它。

http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx

IE8可以使用多个进程用于处理的IE窗口的x数量。 当你穿过一个进程空间中,你失去了你的cookies(Asp.Net会话ID似乎被保留在这个过程中boundry)。

我个人认为这是损坏或错误。 我们知道,当褐变的“同一个域的目标”饼干应保持和重新发送。 这IE8对安全不同的处理行为..太好了! 它行为异常和“下降饼干即使要在其他窗口在同一目标域”只是我认为的错误。

您可以修改的进程数IE8使用通过Internet Explorer选项EHH ..修改注册表设置!!!!!! (这是什么使得它的错误在我看来,IE提供UI修改这些设置将使得“企业级接受的”。

看待,

马文·斯密特



Answer 2:

有背后的多种可能性 -

  • UAC和Vista (假如突然出现!)。 具体来说,就是保护模式下的行为。
  • 这可能是与一个实际的问题, 在IE8会话合并功能 。 更因为通过按Ctrl + N快捷方式打开一个新的窗口,使饼干在你的情况下奇迹般地发出。
  • 与IE浏览器的早期建设的问题(我知道你说,你的客户正在使用最新版本)。 您可能要检查在Microsoft连接可用的细节错误号408806和392032 。


Answer 3:

我们通过改变“设置选项卡进程增长”为0解决了这个问题。

虽然,我们没有保护模式开启和区域是“内联网”。 显然,这是与64位Windows 7的一个问题/错误,正如其他人说。

此页面(#4)导致我的解决方案: http://blog.httpwatch.com/2009/04/07/seven-things-you-should-known-about-ie-8/



Answer 4:

近我可以告诉大家,再变跨选项卡饼干只是去住在此安全更新 ,从2013年11月12日即在IE浏览器的所有版本打破功能在我们的应用程序。 我们正在做在弹出窗口中的OpenID身份验证,从而不必将用户重定向从他们浏览时,他们首先点击登录链接的网页了。 为登录会话cookie被正确地在弹出窗口中的要求下发,但它从来没有得到由主浏览器窗口中看到的,因此对服务器的下一个请求没有像它应该在它是会话cookie,因而登录从来没有实际工作。

有没有人有这个任何可能的解决方案?



Answer 5:

我们对IE6,7这个问题,8 .The情况是父窗口(1)打开一个模式窗口(2),模态窗口中有一个链接到一个非模态窗口(3)。 我曾经获得第三窗口不同的会话ID。

这里提到的解决方法解决了该问题http://support.microsoft.com/kb/831678



Answer 6:

由于IE8,我们(和我们的客户)也遇到同样的问题。 我们创建窗体的ASP服务。 此应用程序使用新的窗口添加元素或管理用户帐户例如随机(打开一个新窗口时),应用程序没有得到验证与其他“永久性”饼干allong所需的会话ID。 因此,会话ID是一个临时cookie。 大多数时候,一切顺利,但其他时候会被打破每次打开一个新的窗口时间。 我们要提醒我们的客户能够关闭所有IE窗口,并重新开始。

作为一个Web开发人员,我用IE广泛。 就个人而言,我没有遇到上述问题。 但我认为相关的一个。 有几次,每天IE完全挂起打开一个新的窗口时(不再响应)。 当我使用任务管理器杀一定IE进程,IE再次开始响应。 但在大多数情况下,最好用IE浏览器的一个干净的新实例从头再来。 为此,我杀了用最少的内存占用这导致所有IE进程退出进程。

微软称,这些问题/错误在最终版本中被压扁不给我自己的努力,解决依然要经历问题的信赖。



Answer 7:

我也发现了这个问题,一个可行的修复。 这里似乎是如何IE8手柄在另一个窗口中使用相对路径,如/测试打开servlet的一个问题。 这似乎是打开一个新的会话,以及一个新的窗口。 我们的可行的解决方法是,与其使用相对路径打开一个新的窗口,我们只是用一个jsp页面。 所以,当我们浏览到一个URL,我们不浏览到/测试anymore.We定位到特定的文件。 在JSP文件中,我们将请求转发到相对路径。 这似乎是工作,这是一种尴尬,因为唯一的区别是,我们正在把一个特定的文件之间。

我希望这有帮助。



Answer 8:

我知道,因为IE 5这个问题,所以我只用会话的变量模式弹出窗口......当我打开一个非模态弹出窗口,我更换所有的会话与ASP.NET缓存和新的对象集合的变量。 ..但它很烦人!

其他浏览器(如火狐)没有这个问题?



Answer 9:

我相信,这其实是在IE中的错误; 我已经报告在这里看到我得到什么反馈: http://social.msdn.microsoft.com/Forums/en-US/83bb3b91-1c1f-4d51-9281-9bc5f51d3640/log-in-fails-cookie-is-未发送到始发标签?论坛= iewebdevelopment



Answer 10:

我有一个类似,但不完全相同的问题。 我们加载打开一个弹出网页window.open()到IE浏览器的控制。 在具有两种IE6和IE8的机器,在弹出的窗口总是由ASP从控制启动时分配一个新的SessionID。 然而,从一个普通的浏览器(IE或Firefox)启动时,弹出窗口获取现有的SessionID。

我可以看到一个新的控制启动时iexplore.exe进程产生; 因此会话丢失行为很有道理给出什么已经提到关于内存中的cookie不被结转到新的进程。

我还在试图找出一个解决办法自己...

更新

想出一个可行的修复! 这是可能的子类SessionIDManager并指定这个类应使用而不是默认的( <sessionState sessionIDManagerType="..."> Web.config中)。 子类可以寻找含有的重写现有会话ID的查询参数CreateSessionID()并返回,如果发现。 这实质上允许页面请求被“合并”到它的知识现有会话。

调用window.open() ,然后只需要在URL指定的查询参数。

山楂斌



Answer 11:

曾与PHP5和IE8类似的问题。 当在Javascript与window.open打开一个特定的弹出窗口,IE8丢失会话cookie,迫使用户阿甘登录。

与此同时,其他弹出窗口的工作确定。

罪魁祸首竟然是一个图像标记。 模板系统动态地生成图像SRC =值和丢失的图像导致了图像标签与空SRC条款(

我supect这个事做的IE解释空SRC标记为不安全的网址,并没有通知用户隔离在弹出会话。



Answer 12:

我也陷入了类似的问题与使用会话变量的值传递给弹出窗口。 我刚刚结束了将值写入永久性Cookie,然后读取在弹出窗口中的cookie。 这可能不是你的窗体身份验证中遇到的问题工作,但如果只是使用会话变量的一些值传递到IE8中的一个窗口,持久cookies似乎已经为我工作。

编辑:又见这个线程



Answer 13:

你也可以使用LocalStoprage方法重置父窗口的值。 localStorage的( “钥匙”)= “值”; //使用Javascript



文章来源: IE8 losing session cookies in popup windows