代码之家  ›  专栏  ›  技术社区  ›  bozo

恢复struts2中的web会话

  •  0
  • bozo  · 技术社区  · 16 年前

    我有一个网站和支付网关集成的经典场景,其中支付请求被发送到支付处理器,支付处理器使用我在原始请求中传递给它的一些参数调用我的应用程序。

    在参数中,我们传递jsessionid,我们希望当远程服务器向我们的服务器发出请求(通过客户浏览器重定向到我们的服务器)时,会话将与用于发送初始付款请求的会话相同。这种情况不会发生,我们有两个不同的会话,尽管支付处理器在对我们的请求中包含了我们的原始jsessionid( https://blabla/?jsessionid=something )

    我们应该如何在struts2中重新创建一个会话,唯一连接“old”和“new”会话的是请求url中的jsessionid?

    有什么想法吗?当用户带着他们的数据输入表单从我们的服务器转移到支付处理器的完全不同的域时,这是完全可能的还是“旧”会话数据被删除了?这将解释我们无法重新创建会话。

    非常感谢你的回复。

    1 回复  |  直到 16 年前
        1
  •  2
  •   leonbloy    16 年前

    也许(我不确定)尝试从另一个网站“重新绑定”到旧的struts(servlet)会话不是很好的做法。

    可以理解,您希望用户从支付处理器返回struts2网站,而不要求其凭据。但是,在这种高级意义上(从不需要重新验证的用户的角度来看),要“保持会话活动”,并不一定意味着您要保持 Struts Servlet会话 活着,为了重新绑定它。在我看来,这似乎有点脏,容易不安全-例如,它不清楚(对用户,也对开发人员),如果原始会话是打开或关闭的时候,用户在支付网站(想一个“注销”的行动,而在支付网站…这是否也会从原始站点注销用户?)

    我会选择其中一个场景:

    1)当被认证用户点击支付站点链接时,它会打开另一个窗口-有两个会话处于活动状态,他可以单独导航和关闭每个会话(第一个会话只是提供了一个认证票证来打开第二个会话)。这是我在自己家银行经常看到的行为。

    2)如果新的支付站点页面替换了以前的页面,那么原始(servlet)会话将无效-但是在新的会话中,在支付站点中,会放置某种身份验证授权令牌,允许他返回到原始站点(可能带有某些特定于会话的数据)。但在这种情况下,将有一个新的servlet-struts2会话。

    基本上,我曾说过,对于一个不活动的浏览器窗口(也就是说,它已经被另一个webapp的某个页面关闭或替换),将一个servlet会话视为活动的(概念上和有意的)是一种可疑的做法。

    另请参见此处: http://nickcoblentz.blogspot.com/2008/09/jsessionid-regeneration-in-struts-2.html