多个服务器如何通过维护相同的用户会话来处理Web应用程序请求。

时间:2013-04-26 06:10:05

标签: java java-ee payment-gateway

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

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

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

  1. 如何将请求从IRCTC发送到CITI银行网站
  2. CITI银行服务器如何从IRCTC收到详细信息
  3. 同样的请求如何从CITI银行返回IRCTC 即服务器如何切换(从CITI银行到IRCTC)
  4. 在通信期间如何在两个不同的服务器之间维护相同的用户会话,即在支付交易完成后,当CITI银行向IRCTC请求返回时,IRCTC将向用户显示为登录用户。 在两台服务器之间切换时,如何维护相同的用户会话?
  5. 我正在使用Struts框架工作。请在这方面帮助我,并通过一些例子来实现。

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

    谢谢,

    • 阿南德

4 个答案:

答案 0 :(得分:3)

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

但系统不需要共享整个会话对象。在您的情况下,您似乎要离开一台服务器,然后在没有任何特殊会话处理的情况下返回。会议刚刚结束。好像您已登录到您喜欢的Web邮件站点,然后转到完全不同的页面并返回到您的Web邮件站点。会议仍在那里。你还在登录。

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

答案 1 :(得分:1)

此处IRCTC和CITI银行之间有无会话共享。 IRCTC通过CITI银行网址上的表格提交向CITI银行提出请求,付款金额和其他内容以该形式作为隐藏参数发送(当然,通过安全机制,与发送值的一些哈希码一样)。

付款成功完成后,花旗银行会将表格提交给IRCTC网址(IRCTC提供的返回网址)。隐藏参数中的详细信息(如成功/错误)。 IRCTC处理并显示成功/错误屏幕。

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

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

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

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

此外,Web服务器请求相同的服务器(对于会话ID),并且只在原始服务器不可访问时调用另一个应用程序服务器,在这种情况下,会话复制将拯救用户。

答案 2 :(得分:0)

如何说服务器中的用户会话相同?

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

通常情况下,您发送网络服务电话并将用户重定向到支付网关的URL,这将处理交易详情。

然后原始银行收到付款网关Web服务响应以及交易详情。

但不同网关的流量略有不同。然而,最重要的是他们不会在你的服务器中为你的用户维护会话,如果他们正在维护一个会话,那么它将用于IRCTC网站。

答案 3 :(得分:0)

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