如何在Java EE应用程序中以编程方式避免IE8提供的会话共享?

时间:2010-06-03 07:23:27

标签: internet-explorer-8 sessionid

微软为了使Internet Explorer 8“更稳定”和“更快”,改变了浏览器的底层架构,并引入了一个名为“Loosely-Coupled IE”(LCIE)的功能,该功能可用于跨越会话共享TAB和新实例。

但是当某人试图使用相同的应用程序一次做两件不同的事情时,会话共享可能是致命的,例如就像有人想要一次预订一张前瞻性旅程机票和一张往返机票,那时候他会预订2张相同的机票。

可行的解决方案

  1. 在创建新窗口而不是通过单击图标或Ctrl + N创建时,我们应该使用File - >新会议;它不会发生。

  2. 您可以在客户端PC上进行注册表更改 - 添加以下内容。

      

    [HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main]

  3.   

    “TabProcGrowth”= dword:00000000

    将禁用“Loosely couple IE8”; IE8然后作为以前版本的IE工作。

    1. 使用iexplore.exe -nomerge运行MSIE将禁用“Loosely Couple IE8”; IE8然后作为IE的早期版本工作。
    2. 但是我将如何以编程方式进行呢?


      你知道,我的问题不是我的申请。如果我登录一个用户,它工作正常,但是当我通过不同用户从IE8浏览器的不同实例登录多个用户时,我以后的会话数据覆盖了前者,这是因为两个IE浏览器都使用相同的会话ID。这是因为IE8的会话共享。对于一个应用程序只维护了一个会话,但是我登录了多少用户。实际上我想要保持每个用户的会话。

      就像我在一个浏览器中登录Gmail时一样。如果我只是在另一个浏览器上键入Gmail。它正在自动登录。我不希望这个在我的申请中。我应该在我应该执行独立操作时由另一个用户登录。

      我的应用程序使用Struts,Spring,Hibernate& JBoss应用程序服务器。

      现在告诉我应该怎么做?

4 个答案:

答案 0 :(得分:2)

我认为您在上面描述的问题可以在所有浏览器上复制,并且可以更好地解决服务器端问题。我所知道的一种方法是创建会话ID并使用状态机管理对话的生命周期。

这允许您(和您的用户)拥有一个可以在多个会话中进行多次会话的会话,这在实践中发生了很多,至少在内部企业应用程序中是这样。这个世界比业务流程模型所展示的更加混乱。

答案 1 :(得分:0)

尝试在客户端维护会话ID。例如,在JSP级别。然后将其发送回服务器组件并尝试跟踪它。假设当前在服务器端收到的会话正在进行中,然后通过同步或类似的等待机制保持一段时间。我希望这种会议问题应该得到解决。

答案 2 :(得分:0)

您最好的选择可能是使用支持多个并发会话的Web框架(称为会话或流程的somtimes),或者只是避免使用会话这么多并转到REST。如果您需要在客户端上破解它,您将无法通过您的webapp执行此操作,但是自定义获胜程序或.reg文件可以执行此操作。这也意味着使用其他操作系统和浏览器的用户仍会遇到同样的问题。

答案 3 :(得分:0)

我不喜欢提供的其他解决方案。我唯一想要的是提供一个用户可以点击的URL,它会获得一个新的会话登录。 有一个明确的sessionAuthentication函数,但一个openLinkInNewSessionWindow

解决IE8浏览器的问题,您可以在“多次登录”页面上提供链接,并使用浏览器中的丑陋WScript。一个例子:

<html>
  <head>    
    <script>
      function openNewSessionIE8NoMerge() {
        // This opens a new session window for windows with IE8, unfortually there is a Active X security warning.
        var WshShell = new ActiveXObject("WScript.Shell");
        WshShell.Run("iexplore.exe -nomerge www.gmail.com?testNewSession");
      }
    </script>
  </head>

  <a href="#" onclick="javascript:openNewSessionIE8NoMerge();">Click here for a new session IE8 (multiple sessions on the same application)</a>
</html>

测试: 将示例保存在sampleNewSession.html中,用IE8打开文件,在新的选项卡中登录gmail,按下sampleNewSession中的链接。现在有一个新窗口,但没有登录。

这将有助于用户,它只需点击一个链接即可。唯一的问题是activeX安全消息。