想知道维护相同用户会话的多个服务器如何处理请求。
例如:我们登录IRCTC并尝试预订机票。 付款期间,IRCTC列出了多个银行选项,其中包含用于在线交易的单选按钮。假设我决定使用CITI银行进行交易,当我点击CITI银行单选按钮时,我被重定向到CITI银行网站交易页面,即您将看到URL从IRCTC网站切换到CITI银行URL。这意味着我完全退出IRCTC并切换到CITI BANK网站。现在,当我的付款交易完成后,我将从CITI银行网站切换回IRCTC网站,而不会结束用户会话,即当我在完成交易后从CITI银行URL切换回IRCTC时,用户会话是保持登录状态。
我想知道这是如何运作的。
我正在使用Struts框架工作。请在这方面帮助我,并通过一些例子来实现。
假设IRCTC使用struts(Jsp / Servlets),struts组件负责将IRCTC的详细信息发送给花旗银行,并将CITI银行的退款收回IRCTC。是否可以使用Requestdispacter.sendRedirect()或其他东西?
谢谢,
答案 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()