打开一个新窗口中创建一个新的会话

问题描述:

我们正在升级从Windows XP的基于web的软件与Internet Explorer 6到Windows 7的Internet Explorer 9打开一个新窗口中创建一个新的会话

此外,web浏览器对象使用WPF应用程序中。

我们现在有一个奇怪的行为,当打开一个带有URL的窗口(带有类似window.open(url)的指令)时,ASP会话“丢失”并且新窗口与新的临时会话一起工作。

我解决了这个问题,避免了无用的窗口打开,而是修改了当前窗口的位置。但我想明白为什么这种行为!

你有什么线索吗?

谢谢。

+0

您可能需要手动设置用于ASP会话的Cookie。检查你的cookies。 – buddhabrot

+0

您能否详细说明“用URL打开窗口”?你的意思是在您的应用程序中打开一个新的应用程序窗口,其中包含Webbrowser控件?或者您的意思是您通过其他导航功能启动了一个新的IE窗口? – AnthonyWJones

+0

这是一个测试,没有运行任何IExplore.exe实例,试图执行导航。 IExplore.exe的实例是否出现在进程列表中? – AnthonyWJones

如果您在www.yoursite.com上运行,但窗口指向yoursite.com,则可能是由于您的域名存在一个简单的差异而导致创建新会话。一个讨厌的人应该注意这一点。

此外,您可能会在某个页面中某处放置一些调试代码,这可能会导致大量头部划伤,清除会话变量以进行测试。还有其他东西要检查,但是你永远不知道。

一些参考,以帮助您:

当您打开使用JavaScript作为默认的IE一个新的窗口,创建一个新的窗口,以及不同一届会议和历史。如果您从javascript新窗口中获取最后一个引用者,它将在主要浏览器中为空。

而且你可以保持您的会话历史,如果你的window.open功能被触发锚对象中:

<script> 
function windowOpen() { window.open("my_page.asp","_blank"); }; 
</script> 
<a href="javascript:windowOpen();">my link</a> 
+1

IE行为的描述非常令人怀疑。在标准的IExpore.exe进程窗口中,所有由javascript或html生成的新窗口将共享同一个会话级cookie存储。创建全新会话的唯一方法是让用户通过文件菜单故意要求IE来完成。 – AnthonyWJones

+0

我没有找到关于这种情况的文档,但是我在过去做了一些测试,结果是当我使用触发器在锚点之外的JavaScript中打开新窗口时,窗口打开时没有历史记录,并且新会话。 Cookie在那里,但这就是Cookie与URL相关的原因。您可以使用window.open从javascript中绕过浏览器引用检查程序,因为会话和历史记录在完成后会丢失。试试你的自我。 –

+0

也许你对“会话”的含义的理解不同于我所理解的含义。在这个问题的背景下,“会话”直接与会话cookie的维护(那些没有持久化到磁盘的cookie)相关联。我广泛使用了各种各样的方法来创建一个新窗口,而我从来没有遇到过你所描述的内容,事实上恰恰相反。无法启动不共享当前窗口的会话cookie存储的新窗口。这里真正的问题是,最初的主机进程不是iexplore.exe。 – AnthonyWJones

假设你的导航都去同一个域,那么另一个原因,这可能是开关流程。从IE8开始,IE“chrome”和标签内容分为两个进程。进一步的IE可以为不同的窗口和标签中的内容创建多个内容处理。

如果您的应用程序正在托管一个浏览器控件,然后启动一个完整的IE窗口,那么您的新URL可能会被另一个进程(iexpore.exe)请求而不是您的应用程序进程。因此,请求无法访问会话cookie,因此会话显示“丢失”。

(值得注意的是,在同一个进程树中的多个iexplore.exe进程实例有相互共享会话cookie的方法)。

我想你可能会遇到与this answer地址相同的问题。实质上,这可能是由于您正在使用的特定计算机上的IE中的安全区错误。正如其他人已经注意到的,我可以重申,只要域没有变化,会话就会被带入其他IE浏览器(6,7,8,9)窗口中,并由javascript打开。

祝你好运!