Java 两个应用程序的会话维护

Java 两个应用程序的会话维护,java,servlets,session-state,sessionid,Java,Servlets,Session State,Sessionid,我有一个web应用程序比如说a, 当我登录此应用程序时,其主页包含一个链接 当我点击该链接时,我将登录到另一个web应用程序Say B,它将在a的主页中的iframe中打开。 这两个应用程序都部署在不同的服务器上 现在,当我单击B应用程序中的任何链接/按钮时,B应用程序的会话将过期 为了维护会话,我通过将会话id添加到B应用程序的url中来重写它 这样做就是登录 但是,当我使用request.getSession()时,我总是得到新对象 我想要上一个会话对象,因为会话对象中有值 他们有什么办法让

我有一个web应用程序
比如说a
, 当我登录此应用程序时,其主页包含一个链接

当我点击该链接时,我将登录到另一个web应用程序
Say B
,它将在a的主页中的
iframe
中打开。

这两个应用程序都部署在不同的服务器上

现在,当我单击B应用程序中的任何链接/按钮时,B应用程序的会话将过期

为了维护会话,我通过将会话id添加到B应用程序的url中来重写它

这样做就是登录

但是,当我使用
request.getSession()
时,我总是得到新对象

我想要上一个会话对象,因为会话对象中有值

他们有什么办法让我能维持会议吗


谢谢

将会话看作是为web应用程序上的每个用户创建的映射

也就是说,属于WebApp-A的会话1是该应用程序的本地会话,而属于WebApp-B的会话2是该应用程序的本地会话

您在URL中看到的jsessionId是应用程序服务器用于标识该webapp的会话对象的键

因此,在您的情况下,您需要考虑通过其他方式共享数据:

  • 如果只想访问某个键/值对,则将其作为请求参数通过URL传递
  • 如果你想访问一个对象,那么考虑使用一个共享存储——就像一个数据库;或者分布式缓存
  • 如果您只想让用户同时登录这两个应用程序,那么您需要一个单一登录解决方案
  • 从问题的外观来看,您只希望用户通过一个挑战登录到两个应用程序。阅读SSO解决方案

    会话对象将不同


    希望能有所帮助。

    这个问题讨论了一些相关的事情


    您似乎需要在应用程序中再注入一层,某种会话管理器。由于您无法修改
    应用程序B
    ,因此您应该修改“应用程序A”。但在这种情况下,你将成为形势的人质。另一件坏事是,如果再添加一个
    app C
    ,你该怎么办


    嗯,Harsha R已经提到了SSO解决方案。正如我前面所说,您可以在
    应用程序A
    级别的某个会话管理器上实现一个。例如,通过特殊的
    Servlet
    Filter
    功能合作请求
    app B
    ,您可以替换
    Http头
    ,以支持无缝
    JSESSIONID
    (和另一个会话保持功能)在不同的应用程序之间进行管理。

    如果会话跟踪模式为
    COOKIE
    ,您可以尝试更改COOKIE名称,以便两个应用程序的COOKIE名称不同:

      <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
          <!-- change below -->
          <name>web-app-A</name>
          <path>/</path>
          <http-only>true</http-only>
        </cookie-config>
        <tracking-mode>COOKIE</tracking-mode>
      </session-config>
    
    
    30
    web-app-A
    /
    真的
    曲奇
    
    您使用什么框架和服务器?我使用的是tomcat、sturts1,我无法访问应用程序A的代码