1

目前我们正在使用 window.open 打开一个新的 aspx 页面。window.open 位于当前 aspx 页面中的 javascript 函数 (openNewWindow()) 中,单击 asp.net 超链接控件时会调用该函数。

链接是由我们的框架在页面上动态创建的,因此我想避免更改该功能。

问题似乎是当这个新的“子”窗口关闭时,会话状态会丢失。我应该提到,在“子”窗口关闭后,会话在子窗口中可用,但在“父”窗口中不可用。

有趣的是,似乎在我们应用程序的其他地方,如果通过在超链接控件的代码隐藏单击事件上使用 ClientScriptManager.RegisterStartupScript 调用将 open.window 调用添加到页面(而不是调用在aspx) 会话被保留。

如果不进行重大更改和所有需要的回归测试,后一种解决方案将难以在当前框架代码中实现。

任何人都知道如何在子窗口关闭后保持会话状态处于活动状态。

顺便说一句,这发生在 IE7 中,我们的应用程序是基于 asp.net 2.0 的。

提前感谢您对这个问题的深刻而优雅的解决方案!;o)

4

3 回答 3

1

IE 7 改变了新窗口的行为。基本上,每个窗口都是在它自己的进程中打开的。选项卡仍然在同一进程中打开。

这意味着每个新窗口都有自己的 cookie 袋。这意味着新窗口没有自动分配 Session_ID cookie。.Net 链接控件会将 cookie 发送到新窗口。但是,仅使用直接 javascript 打开一个新窗口可能不会这样做。

FireFox 一直这样,我相信 Chrome 一直都是这样。IE 6 和以前的共享进程空间,即使对于多个窗口也是如此,所以一切都在两者之间共享,这给严格在 IE 中调试站点带来了无尽的麻烦。

更新
这是一个详细描述问题的链接。您会注意到这种行为有些不一致。原因是有时 IE 7 决定在自己的进程中打开新窗口,有时它会在新窗口中打开。

有两个真正的解决方案。要么完全停止依赖会话(我的第一选择,我对此有很强的技术原因),要么您需要切换到无 cookie 会话。

于 2010-01-11T16:07:08.570 回答
0

我应该纠正自己(抱歉无法编辑原始问题)并说触发 javascript 以执行“window.open”的控件是链接按钮而不是超链接。

于 2009-03-25T14:37:42.213 回答
0

它也发生在我的 Chrome 中。

我通过添加解决了这个问题:

<link rel="shortcut icon" href="../../img/favicon.ico">

<head></head>将打开的页面中。

于 2018-08-24T04:14:09.680 回答