Internet explorer 8 如何在JavaEE应用程序中以编程方式避免IE8提供的会话共享?

Internet explorer 8 如何在JavaEE应用程序中以编程方式避免IE8提供的会话共享?,internet-explorer-8,sessionid,Internet Explorer 8,Sessionid,为了使Internet Explorer 8“更稳定”和“更快”,Microsoft改变了浏览器的底层架构,并引入了一种称为“松散耦合IE”(LCIE)的功能,该功能可用于跨选项卡和新实例的会话共享 但是,如果有人试图在同一个应用程序中同时做两件不同的事情,会话共享可能是致命的,例如,像有人希望一次预订一张远期车票和一张往返车票一样,此时他将预订两张他不打算预订的相同车票 可能的解决方案 在创建新窗口时,而不是通过单击图标或Ctrl+N来创建,我们应该使用File->new Session;这不

为了使Internet Explorer 8“更稳定”和“更快”,Microsoft改变了浏览器的底层架构,并引入了一种称为“松散耦合IE”(LCIE)的功能,该功能可用于跨选项卡和新实例的会话共享

但是,如果有人试图在同一个应用程序中同时做两件不同的事情,会话共享可能是致命的,例如,像有人希望一次预订一张远期车票和一张往返车票一样,此时他将预订两张他不打算预订的相同车票

可能的解决方案

  • 在创建新窗口时,而不是通过单击图标或Ctrl+N来创建,我们应该使用File->new Session;这不会发生

  • 您可以在客户端PC上更改注册表-添加以下内容

    [HKEY\U当前\U用户\Software\Microsoft\Internet Explorer\Main]

  • “TabProcGrowth”=dword:00000000

    将禁用“松散耦合IE8”;IE8将与IE的早期版本一样工作

  • 使用
    iexplore.exe运行MSIE-nomerge
    将禁用“松散耦合IE8”;然后IE8将与IE的早期版本一样工作
  • 但我将如何通过编程来实现呢


    你看,我的问题不在于我的应用程序。如果我登录一个用户,它可以正常工作,但是当我通过IE8浏览器不同实例的不同用户登录多个用户时,我后面的会话数据会覆盖前面的会话数据,这是因为两个IE浏览器使用相同的会话id。这是因为sessIE8的离子共享。一个应用程序只维护一个会话,但我登录了多少用户。事实上,我希望每个用户都保持会话

    就像我在一个浏览器中登录Gmail一样。如果我只是在另一个浏览器中键入Gmail,它会自动登录。我不希望在我的应用程序中出现这种情况。我应该一次让另一个用户登录,我应该执行独立操作

    我的应用程序使用Struts、Spring、Hibernate和JBoss应用服务器


    现在告诉我应该如何继续?

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

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


    这允许您(和您的用户)在一个会话中可以同时进行多个会话,这在实践中经常发生,至少在内部企业应用程序中是如此。这个世界比业务流程模型显示的更混乱。

    您最好的选择可能是使用支持多个并发会话的web框架(有时称为对话或流),或者只是避免过多地使用会话,然后去休息。如果你需要在客户端上破解它,你将无法从你的Web应用程序中破解,但是自定义win程序或.reg文件可以做到。这也意味着使用其他操作系统和浏览器的用户仍然会遇到同样的问题。

    我不喜欢提供的所有其他解决方案。仅我想要的是提供一个用户可以点击的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>
    
    
    函数openNewSessionIE8NoMerge(){
    //这将为使用IE8的windows打开一个新的会话窗口,不幸的是,实际上存在一个活动的X安全警告。
    var WshShell=newActiveXObject(“WScript.Shell”);
    运行(“iexplore.exe-nomerge www.gmail.com?testNewSession”);
    }
    
    测试: 将示例保存在sampleNewSession.html中,使用IE8打开文件,在gmail的新选项卡登录中,按sampleNewSession中的链接。现在有一个新窗口,未登录


    这将帮助用户,它只需单击一个链接。唯一的问题是activeX安全消息。

    ya,它正在工作……但这不是我需要的。我需要的是我在struts1.2中有一个web应用程序。我们有不同的用户组。不同的用户组可以获得不同的功能。但是如果我使用两个di登录两个不同的浏览器不同的组用户,formergroup标识将被后面的组用户覆盖。