【问题标题】:Losing session state after close of a window opened with window.open关闭使用 window.open 打开的窗口后丢失会话状态
【发布时间】:2018-08-24 14:43:08
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 首先,将 Session_OnEnd 事件处理程序添加到 global.asax 以捕捉何时以及是否实际发生...
  • (假设您没有处于自定义会话模式 - 您的会话 cookie 也是基于?)

标签: asp.net session session-state


【解决方案1】:

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

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

FireFox 采用这种方式已经有一段时间了,我相信 Chrome 也一直采用这种方式。 IE 6 和以前的共享进程空间,即使对于多个窗口也是如此,因此所有内容都在两者之间共享,这给严格在 IE 中调试站点带来了无尽的麻烦。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这也发生在我的 Chrome 中。

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

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

      &lt;head&gt;&lt;/head&gt;将打开的页面中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-23
        • 2013-10-21
        • 2011-01-17
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        相关资源
        最近更新 更多