8

想知道维护相同用户会话的多个服务器如何处理请求。

例如:我们登录 IRCTC 并尝试订票。在付款过程中,IRCTC 列出了多个带有单选按钮的银行选项,用于在线交易。假设我决定使用花旗银行进行交易,当我点击花旗银行单选按钮时,我将被重定向到花旗银行网站交易页面,即您将看到 URL 从 IRCTC 网站切换到花旗银行 URL。这意味着我完全退出 IRCTC 并切换到 CITI BANK 网站。现在,当我的支付交易完成时,我从 CITI 银行网站切换回 IRCTC 网站而不结束用户会话,即当我在完成交易后从 CITI 银行 URL 切换回 IRCTC 时,用户会话保持在登录状态。

我想知道这是如何工作的。

  1. 如何从 IRCTC 向 CITI 银行网站发送请求
  2. 花旗银行服务器如何从 IRCTC 接收详细信息
  3. 相同的请求如何从 CITI 银行返回到 IRCTC,即服务器如何切换(从 CITI 银行到 IRCTC)
  4. 在通信期间如何在两个不同的服务器之间保持相同的用户会话,即当付款交易完成后从 CITI 银行返回到 IRCTC 的请求时,IRCTC 将显示用户为登录用户。在两台服务器之间切换时如何保持相同的用户会话?

我正在使用 Struts 框架工作。请在这方面帮助我,并通过一些示例来实现。

假设 IRCTC 使用 struts (Jsp/Servlets),struts 组件负责将 IRCTC 的详细信息发送到 Citi 银行,并从 CITI 银行接收回详细信息给 IRCTC。是否可以使用 Requestdispacter.sendRedirect() 或其他东西?

谢谢,

  • 阿南德
4

4 回答 4

3

有一种叫做会话复制的东西。它在集群中用于让所有集群节点使用相同的会话信息。如果您好奇,请阅读有关会话复制如何工作的链接站点或其他资源。

但是系统不需要共享整个会话对象。在您的情况下,您似乎要离开一台服务器,然后在没有任何特殊会话处理的情况下返回。会议从未关闭。就像您登录到您最喜欢的网络邮件站点一样,然后移动到一个完全不同的页面并返回您的网络邮件站点。会话仍然存在。您仍处于登录状态。

因此,IRCTC 站点可能会将一些信息传递给 CITI 银行站点,CITI 需要这些信息以及令牌(在最简单的情况下只是一个数字)来处理请求。当 CITI 银行完成后,它会使用结果代码和令牌调用 IRCTC 服务器。使用令牌,IRCTC 服务器可以将结果代码与您的会话相关联。然后花旗银行只是将您的浏览器重定向到 IRCTC 页面。那里的服务器有一个更新的会话,可以在您的订单过程中向您显示下一页。

于 2013-04-26T06:20:17.753 回答
1

IRCTC 和 CITI 银行之间没有共享会话。IRCTC 通过 CITI 银行 url 上的表单提交向 CITI 银行提出请求,支付金额和其他内容作为隐藏参数发送到该表单中(当然,通过安全机制,例如发送值的一些哈希码)。

支付成功后,花旗银行会向 IRCTC URL 提交表单(返回 IRCTC 给出的 url)。在隐藏参数中包含详细信息(如成功/错误)。IRCTC 处理并显示成功/错误屏幕。

此外,在这种情况下,您的父应用程序中的会话永远不会被终止。会话可以通过以下方式之一结束:

 1. Session time out
 2. Logout
 3. Application destroys the session

在这种情况下,这一切都没有发生,用户会话仍然存在于浏览器和应用程序中。

如果应用程序有多个服务器,则使用服务器提供的会话复制机制在它们之间共享会话。

此外,Web 服务器请求同一台服务器(用于会话 id)并且仅在原始服务器无法访问时调用另一个应用程序服务器,在这种情况下会话复制可以拯救用户。

于 2013-04-26T06:43:41.950 回答
0

你怎么能说两个服务器中的用户会话是相同的?

我将假设您正在谈论支付网关选项及其功能。

通常发生的情况是您发送 Web 服务调用并将用户重定向到支付网关的 URL,该 URL 将处理交易详细信息。

然后,原始银行收到带有交易详细信息的支付网关 Web 服务响应。

不过,此流程在不同网关上略有不同。然而最重要的是他们不会在他们的服务器中为您的用户维护会话,如果他们正在维护会话,那么它将为 IRCTC 网站。

于 2013-04-26T06:23:57.727 回答
0

有一种叫做会话迁移的东西,其中一个 LBS(负载平衡服务器)可用于获取多个请求并与多个应用程序服务器联系。有时一个用户请求可能会被多个服务器共享,其中多个用户请求相同的东西。显然,请求所在的服务器必须是免费的。然后 LBS 接受第一个请求并转发到为该用户创建会话 obj 的免费服务器。现在第二个请求被转发到第二个服务器。但是第二台服务器想要共享第一个用户会话 Obj,所以我们必须从会话 1 迁移到会话 2。它有两个事件,将发生钝化事件和激活事件。我们必须使用一个监听器 HttpSessionActivationListener 并且必须实现 void sessionWillPasivate() 和 void sessionDidActivate()

于 2015-08-28T05:41:24.873 回答