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

Opening a new window create a new session

本文关键字:一个 新会话 会话 创建 新窗口 窗口      更新时间:2023-09-26

我们正在将一个基于web的软件从Windows XP和ie6升级到Windows 7和ie9。

此外,webbrowser对象在WPF应用程序中使用。

我们现在有一个奇怪的行为,当打开一个带有url的窗口时(使用像window.open(url)这样的指令),ASP会话"丢失",新窗口与一个新的从头开始的会话一起工作。

我通过避免无用的窗口打开来解决这个问题,而是修改当前窗口的位置。但是我想知道为什么会有这种行为!

你有什么线索吗?

谢谢。

这可能是由于您的域名简单不同,如果您正在运行www.yoursite.com,但窗口指向yoursite.com,那么将创建一个新的会话。很难缠,所以要小心。

此外,您可能在页面的某个地方有一些调试代码,这可能会导致很多头痛,例如清除会话变量以进行测试。还有其他需要检查的东西,虽然可能性不大,但你永远不会知道。

假设您的导航都指向同一个域,那么另一个原因可能是进程的切换。从IE8开始,IE"chrome"和标签内容被分成两个进程。此外,IE还可以为不同窗口和选项卡中的内容创建多个内容进程。

如果你的应用程序托管了一个浏览器控件,然后启动了一个完整的IE窗口,那么很有可能你的新URL是由另一个进程(iexpose .exe)而不是你的应用程序进程请求的。因此,请求无法访问会话cookie,因此会话看起来"丢失"。

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

我想你可能有同样的问题,这个答案解决。从本质上讲,这可能是由于您正在使用的特定计算机上的IE中的安全区域错误。正如其他人所注意到的,我可以重申,只要域名没有改变,会话就会被带入javascript打开的其他IE(6,7,8,9)窗口。

祝你好运!

参考资料:

  • MSDN文档
  • W3Schools

当你打开一个新窗口使用javascript作为默认IE,创建一个新的窗口,以及不相同的会话和历史记录。如果你从javascript新窗口获得最后一个引用,那么在主流浏览器中它将是空的。

你可以保留你的会话历史,如果你的窗口。在锚点对象内触发Open函数:

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