Java EE应用程序上的会话处理

我正在开发一个系统来处理客户商家系统收到的金融交易,它是我们从供应商处购买的现有系统的替代品。 客户端界面应从我们的系统调用用户身份validation和事务处理屏幕。

系统function如下,

  1. 从商家的站点接收输入参数
  2. validation它
  3. validation用户(用户在我们的系统中注册,我们应该调用我们的登录屏幕)
  4. 流程交易
  5. 返回商家的状态回复

一个响应被接收客户端应该从会话中的值validation事务数据。

系统概述可以描述如下,

在此处输入图像描述

( 点击此处查看完整尺寸的图片 )

我的问题是,一旦我们响应客户端,客户端就无法保留会话。 但是我们从供应商那里购买的系统可以实现相同的function(我们没有这个的源代码来分析内部编码结构)。 我希望我们对客户做出回应的方式有问题。

我怎样才能克服这个问题?

我们使用的是Java 1.4.2,Websphere应用服务器

有许多事情可以使会话消失。 我建议跟踪它们并validation是否正常。 如果您了解会话的工作方式,这将更容易做到。

  • 会话已超时。 这通常默认为30分钟。 这可以通过web.xml中的进行配置,您可以在其中指定超时(以分钟为单位)。 您可以实现HttpSessionListener来跟踪会话创建并使用记录器进行销毁。

  • 会话被强制失效。 当代码调用HttpSession#invalidate()时会发生这种情况。 这也可以通过HttpSessionListener跟踪。

  • 会话cookie已经消失。 会话由cookie支持。 如果已创建会话,则服务器将添加具有会话ID的Set-Cookie标头。 客户端应该在Set-Cookie头中指定的(上下文)路径上的所有后续请求中将相同的cookie发送回Set-Cookie头。 这可以在浏览器的内置Web开发人员工具集的HTTP流量监视器(“网络”选项卡)中进行跟踪(在Chrome / Firefox23 + / IE9 +中按F12)。 Cookie可以在同一个Cookie域中的所有Web应用程序访问。 此外,如果ServletC2在与ServletC1不同的webapp上下文上运行,那么它将不会使用相同的会话。 此外,如果“服务器”web应用程序在同一个域上运行,那么它理论上可以消除“客户端”Web应用程序的所有cookie。

  • 客户端不支持cookie。 精心设计的Web应用程序使用jsessionid进行URL重写,以在同一Web应用程序的请求之间跟踪无Cookie客户端。 但是,当重定向回第一个Web应用程序时,第二个Web应用程序必须执行相同的操作。