两个应用程序的会话维护

时间:2013-11-15 08:08:39

标签: java servlets session-state sessionid

我有一个网络应用程序say A, 当我登录此应用程序时,其主页包含一个链接,

当我点击该链接时,我正在登录另一个网络应用程序Say B,并在A的主页中打开 iframe

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

现在,当我点击B应用程序{B}申请的(iframe in A) session内的任何链接/按钮到期时。

为了维持会话,我通过追加会话ID 重写B应用程序的网址。

通过这样做登录。

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

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

他们是否可以保持会议。???

由于

4 个答案:

答案 0 :(得分:0)

将会话视为为Web应用程序上的每个用户创建的Map。

含义,属于WebApp-A的session1对于该应用程序是本地的,属于WebApp-B的session2对于该应用程序是本地的。

您在URL中看到的jsessionId是应用程序服务器用来标识该Web应用程序的会话对象的密钥。

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

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

    会话对象会有所不同。

    希望有所帮助。

答案 1 :(得分:0)

此Stackoverflow问题讨论了一些相关的事情。

How to transfer session from one Tomcat server to another?

答案 2 :(得分:0)

似乎你需要在你的应用程序中再注入一层,某种会话管理器。由于您无法修改app B,因此您应该修改“应用A”。但在这种情况下,你将成为人质。另一个坏处是质疑在添加一个app C时你必须​​做什么。

嗯,Harsha R已经提到了SSO解决方案。您可以在app A级别实现一个,如前所述,我可以使用一些会话管理器。例如,通过您的特殊app BServlet功能合作请求Filter,您可以替换Http-Headers来支持无缝JSESSIONID(以及其他会话管理)管理在不同的应用程序之间。

答案 3 :(得分:0)

如果会话跟踪模式为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>