会话管理支持
WebSphere® Application Server 提供在会话管理标题下分组的工具,这些工具支持在 Servlet API 规范中描述的 javax.servlet.http.HttpSession 接口。
依照 Servlet 2.3 API 规范,会话管理工具通过 Web 模块支持会话作用域限定。仅同一 Web 模块中的 Servlet 可访问与特定会话相关联的数据。来自同一浏览器的多个请求(每个请求指定一个唯一 Web 应用程序)导致多个会话共享一个会话标识。您可以在不影响其他会话的情况下使任何共享一个会话标识的会话无效。
您可以配置每个 Web 应用程序的会话超时。Web 应用程序超时值为 0(缺省值)表示使用来自会话管理工具的无效超时值。
当 HTTP 客户机与 Servlet 交互时,与一系列客户机请求关联的状态信息表示为 HTTP 会话并由会话标识表明。会话管理负责管理 HTTP 会话、提供会话数据的存储、分配会话标识并通过使用 cookie 或 URL 重写技术跟踪与每个客户机请求关联的会话标识。会话管理可以用几种方法来存储与会话相关的信息:
- 在应用程序服务器内存中(缺省值)。此信息无法与其他应用程序服务器共享。
- 在数据库中。此存储选项称为数据库持久会话。
在另一个 WebSphere Application Server 实例中。此存储选项称为内存到内存会话。
最后两个选项称为分布式会话。对于使用 HTTP 会话对工具进行故障转移来说,分布式会话是必不可少的。当应用程序服务器接收到与会话标识关联的请求(当前内存中不存在该会话标识)时,它可以通过访问外部存储(数据库或内存到内存)来获取所需的会话状态。如果未启用分布式会话支持,那么应用程序服务器无法访问 HTTP 请求(该请求发送到非最初创建会话的服务器)的会话信息。会话管理实现高速缓存优化以使访问外部存储的开销减至最小,特别是当连续的请求路由到同一应用程序服务器时。
在外部存储中存储会话状态还提供容错等级。如果应用程序服务器脱机,那么它的当前会话状态在外部存储中仍是可用的。此可用性使其他应用程序服务器能继续处理与该会话关联的后续客户机请求。
将会话状态保存到外部位置不能完全保证服务器发生故障时他们能保存。例如,当服务器正在更改会话的状态时,如果它发生故障,那么会丢失某些信息并可能会影响使用该会话的后续处理。但是,此情况表示有短暂的丢失会话信息的风险。
将会话状态保存在外部存储的缺点是在外部位置访问会话状态可能会使用宝贵的系统资源。会话管理可以通过在服务器级别高速缓存会话数据来改进系统性能。指向到同一服务器的多个连续的请求可以在高速缓存中发现所需的状态数据,减少在外部存储中访问实际会话状态的次数,从而减少外部位置访问的相关开销。
