Java - 如何在两个或多个Web应用程序之间共享会话?

时间:2013-01-10 10:50:28

标签: java spring session web-applications

我有两个网络应用程序。我将登录到一个Web应用程序,并将通过第一个应用程序的链接或重定向导航到另一个Web应用程序。最后,在完成Application 2中的一些步骤后,我将被重定向到Application one。我该如何实现呢?

这里的Application 2是通用的,我将有三个Application One实例,它们将与Application 2进行交互。

请建议更好的方法。我必须使用spring和Spring Webflow来实现它。

2 个答案:

答案 0 :(得分:7)

从技术上讲,两个Web应用程序(两个不同的WAR)之间的会话不能共享。这是设计使然,是出于安全原因。我想就您的问题提出以下意见和建议,

  1. 会话通常使用会话ID 进行跟踪,会话ID 通常作为cookie存储在服务器端的浏览器和Session对象上。
  2. 当您发送请求时,此Cookie会在每次时发送到服务器端
  3. Cookie将发送到其来自的服务器。
  4. 因此www.mysite.com/app1设置的cookie只会发送到www.mysite.com/app1而不会发送到www.mysite.com/app2。
  5. 对于您的情况,要使用户会话在两个应用程序中有效,浏览器将需要从app1和app2设置两个cookie。
  6. 一种方法是,当您使用java脚本登录app1时,也会向app2发送登录请求。当这两个请求成功返回时,您的浏览器将同时具有两个应用程序(app1和app2)的会话
  7. 现在注销将面临挑战,当您从app1注销时,您还需要从app2注销。从技术上讲,这意味着您需要清除这两个应用程序中设置的cookie。在Java脚本的帮助下,你可以做到这一点。

答案 1 :(得分:6)

当你必须从app1调用app2时,通过请求对象传递所有必要的信息(作为请求参数),然后app2可以在那里读取并创建会话(也许可以使用servlet / filter)

您可以使用群集在计算机之间共享同一应用程序(app1和app1)之间的会话。