【问题标题】:Opening a new window create a new session打开一个新窗口创建一个新会话
【发布时间】:2012-01-18 08:01:24
【问题描述】:

我们正在将基于 Web 的软件从带有 Internet Explorer 6 的 Windows XP 升级到带有 Internet Explorer 9 的 Windows 7。

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

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

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

你有什么线索吗?

谢谢。

【问题讨论】:

  • 您可能需要手动设置用于 ASP 会话的 cookie。检查您的 cookie。
  • 您能否详细说明“打开带有 URL 的窗口”?您的意思是在您的应用程序中打开一个新的应用程序窗口,该窗口托管 Webbrowser 控件?或者你的意思是你通过其他导航启动一个新的 IE 窗口?
  • 这是一个测试,没有任何 IExplore.exe 实例运行,尝试执行您的导航。 IExplore.exe 的实例是否出现在您的进程列表中?
  • @AnthonyWJones 我的意思是调用打开窗口的方法。

标签: javascript session asp-classic internet-explorer-6 internet-explorer-9


【解决方案1】:

这可能是由您的域名中的一个简单的不同引起的,如果您在 www.yoursite.com 上运行但窗口指向 yoursite.com,那么将创建一个新会话。抓到一个讨厌的人,所以要小心。

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

【讨论】:

    【解决方案2】:

    假设您的导航都转到同一个域,那么另一个原因可能是进程切换。从 IE8 开始,IE“chrome”和 tab 内容被分成两个进程。进一步IE可以为不同窗口和标签中的内容创建多个内容进程。

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

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

    【讨论】:

      【解决方案3】:

      我认为您可能遇到与this answer 相同的问题。本质上,这可能是由于您正在使用的特定计算机上的 IE 中的安全区域错误。正如其他人所指出的,我可以重申,只要域没有改变,会话就会被带到由 javascript 打开的其他 IE(6、7、8、9)窗口中。

      祝你好运!

      【讨论】:

        【解决方案4】:

        一些可以帮助你的参考资料:

        当您使用javascript作为默认IE打开一个新窗口时,创建一个新窗口,以及不一样的会话和历史记录。如果您从 javascript 新窗口获取最后一个引荐来源网址,则在主流浏览器中它将为空。

        如果您的 window.open 函数在锚对象内触发,您可以保留会话历史记录:

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

        【讨论】:

        • 对IE行为的描述很可疑。在标准的 IExpore.exe 进程窗口中,由 javascript 或 html 生成的所有新窗口都将共享相同的会话级 cookie 存储。创建新会话的唯一方法是用户通过“文件”菜单故意要求 IE 这样做。
        • 我没有找到这个案例的文档,但是我过去做了一些测试,结果是当我使用触发器在锚点之外的javascript中打开新窗口时,窗口打开没有历史记录和新会话。 cookie 在那里,但这就是 cookie 与 URL 相关的原因。您可以使用 javascript 中的 window.open 绕过浏览器引荐来源网址检查,因为完成此操作后会话和历史记录会丢失。自己试试吧。
        • 也许您对“会话”含义的理解与我所理解的含义有所不同。在这个问题的上下文中,“会话”直接与会话 cookie 的维护相关(那些没有持久化到磁盘的 cookie)。我已经广泛使用了各种各样的方法来启动一个新窗口,但我从来没有遇到过你所描述的,事实上恰恰相反。无法启动不共享当前窗口的会话 cookie 存储的新窗口。这里真正的问题是初始宿主进程不是 iexplore.exe。
        • 我在谈论与@Ubiquité 问题相关的 ASP 会话(服务器端)。 Cookie 会话将保留在浏览器中,无论您是否打开了窗口,某些浏览器的 private 导航模式会忽略 cookie 会话。
        • 我无法解释你所看到的,我放弃试图说服你。我只需要我的 cmets 在这里与明显错误的信息作斗争。这不是意见问题。事实上,ASP 会话是通过会话级别的 cookie 维护的(使用 Fiddler 来观察这一点)。事实上,window.open 创建了一个共享会话 cookie 的新窗口。事实上,我的代码的 1000 名用户依赖并且没有观察您似乎在描述的内容。
        猜你喜欢
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 2010-09-29
        • 2012-02-04
        • 1970-01-01
        • 2014-10-15
        • 2018-02-28
        • 1970-01-01
        相关资源
        最近更新 更多