Java 如何通过维护同一用户会话由多个服务器处理web应用程序请求。?

Java 如何通过维护同一用户会话由多个服务器处理web应用程序请求。?,java,jakarta-ee,payment-gateway,Java,Jakarta Ee,Payment Gateway,想知道维护同一用户会话的多个服务器如何处理请求 例如:我们登录IRCTC并尝试预订机票。 在支付过程中,IRCTC列出了多个银行选项,带有单选按钮,用于在线交易。假设我决定使用花旗银行进行交易,当我点击花旗银行单选按钮时,我被重定向到花旗银行网站交易页面,即您将看到URL从IRCTC网站切换到花旗银行URL。这意味着我完全脱离了IRCTC,转到了花旗银行网站。现在,当我的支付交易完成时,我将从花旗银行网站切换回IRCTC网站,而不结束用户会话,即当我在完成交易后从花旗银行URL切换回IRCTC时

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

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

我想知道这是怎么回事

  • 如何从IRCTC向花旗银行网站发送请求
  • 花旗银行服务器如何从IRCTC接收详细信息
  • 花旗银行如何向IRCTC回复同样的请求 i、 e服务器切换方式(从花旗银行到IRCTC)
  • 在通信过程中,两台不同服务器之间如何维护相同的用户会话,即支付交易完成后,当花旗银行向IRCTC返回请求时,IRCTC将显示用户为登录用户在两台服务器之间切换时,如何维护相同的用户会话?
  • 我正在使用Struts框架。请在这方面帮助我,并用一些例子来实现

    假设irtc使用struts(Jsp/Servlets),哪个struts组件负责将irtc的详细信息发送给花旗银行,并从花旗银行接收回irtc的详细信息。是否可以使用requestDisacter.sendRedirect()或其他东西

    谢谢

    • 阿南德
      • 有一种东西叫做。它在集群中使用,使所有集群节点使用相同的会话信息。如果您有兴趣,请阅读链接站点或其他资源,了解会话复制的工作原理

        但是系统不需要共享整个会话对象。在您的情况下,看起来您将离开一台服务器,然后返回,而无需任何特殊会话处理。会议从未结束。就好像你要登录到你最喜欢的web邮件站点一样,然后移动到一个完全不同的页面并返回到你的web邮件站点。会议还在那里。您仍在登录


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

        您如何说两台服务器中的用户会话相同

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

        通常情况下,您会发送一个web服务调用,并将用户重定向到支付网关的URL,该URL将处理交易细节

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


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

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

        付款成功后,花旗银行向IRCTC URL(IRCTC提供的返回URL)提交一份表格。隐藏参数中包含详细信息(如成功/错误)。IRCTC处理并显示成功/错误屏幕

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

         1. Session time out
         2. Logout
         3. Application destroys the session
        
        在这种情况下,所有这些都没有发生,并且用户会话仍然存在于浏览器和应用程序中

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


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

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

        我不认为支付网关维护来自不同银行的单个用户会话…@Eduard,在这种情况下,不能进行会话复制,因为IRCTC和花旗银行是不同的组织,因此它们不能进行会话复制