【问题标题】:Java - How to share the session between two or more Web Application?Java - 如何在两个或多个 Web 应用程序之间共享会话?
【发布时间】:2012-12-24 17:40:44
【问题描述】:

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

这里应用程序二是通用的,我将拥有三个应用程序一的实例,它们将与应用程序二进行交互。

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

【问题讨论】:

标签: java spring session web-applications


【解决方案1】:

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

  1. 会话通常使用 会话 ID 进行跟踪,该 ID 通常存储为浏览器上的 cookie 和服务器端的会话对象。
  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 脚本的帮助下,您可以做到这一点。

【讨论】:

  • 来自规范(tools.ietf.org/html/rfc2109):Path 属性指定了此 cookie 应用到的 URL 子集。
  • 也可以参考这个帖子:stackoverflow.com/questions/1967963/…
  • 对于“会话ID在您域的所有地方共享”,路径需要设置为'/'。这就是 PHP 必须要做的,否则 cookie 处理与任何技术(java/php 等)无关
  • 是否可以为整个域设置会话cookie并且不限制它们到特定路径?
  • 是的。那是可能的。您需要做的就是将路径设置为 root '\' 的会话 cookie。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回复 Anantha。我可以有两个单独的会话。无需单个会话。请提出一些想法来实现这个。我不知道如何实现它。它就像一个流程。我在 App1 中做一些功能。之后,我将前往 App2 并执行一些其他功能,这些功能是 App1 的延续,然后返回 App1 并完成流程。
  • 这就像去第二个应用程序进行付款并返回到 App1
  • 你解释的是一个典型的支付过程(正如你提到的),这里的过程是将所有必要的信息作为请求的一部分(通常是 HTTP POST)传递,这将在 app2 中创建一个会话(处理付款和退货)...
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2011-09-23
  • 2016-07-16
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
相关资源
最近更新 更多