



开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP
![]() ![]() ![]() ![]() |
使用会话和会话持久性
HTTP 会话概述
通过会话跟踪,您可以跟踪用户在多个自身无状态的 servlet 或 HTML 页面上的进度。会话被定义为特定时间段内来自同一个客户端的一系列相关的浏览器请求。会话跟踪将一系列浏览器请求联结起来(可以将这些请求当作页面来考虑),这些请求整体上可能具有一定的含义,例如购物车应用程序。
设置会话管理
默认情况下,WebLogic Server 设置为可以处理会话跟踪。无需设置以下任何属性即可使用会话跟踪。但是,配置 WebLogic Server 管理会话的方式是调整应用程序以获得最佳性能的关键部分。设置会话管理时,您需确定如下因素:
您还可以永久存储来自 HTTP 会话的数据。请参阅配置会话持久性 。
HTTP 会话属性
通过在 WebLogic 特定的部署描述符 weblogic.xml
中定义各种属性,您可以配置 WebLogic Server 会话跟踪。有关会话特性的完整列表,请参阅 session-descriptor 。
在以前的 WebLogic Server 版本中,引入了对 SessionID 格式的一个更改,以致某些负载平衡器丧失了保持会话粘滞性的能力。服务器启动标志 -Dweblogic.servlet.useExtendedSessionFormat=true 保留了负载均衡应用程序保持会话粘滞性所需要的信息。如果激活了 URL 重写功能,且启动标志设置为真,则扩展会话 ID 格式将属于 URL 的一部分。
会话超时
您可以指定 HTTP 会话过期的时间间隔。会话过期时,将放弃会话中存储的所有数据。可以在 web.xml 或 weblogic.xml 中设置时间间隔:
-
weblogic.xml
中的 session-descriptor 元素中设置timeout-secs
参数值。该值以秒为单位进行设置。有关详细信息,请参阅 session-descriptor 。 -
web.xml
中设置 session-timeout 元素。
配置 WebLogic Server 会话 Cookie
客户端浏览器支持 cookie 时,WebLogic Server 使用 cookie 进行会话管理。
默认情况下,WebLogic Server 用于跟踪会话的 cookie 设置为暂态,其生存期不会超过会话期间。用户退出浏览器时,cookie 丢失,会话结束。此行为主要用于会话,建议您以此方式使用会话。
您可以在 WebLogic 特定部署描述符 weblogic.xml
中配置 cookie 的 session-tracking 参数。会话及 cookie 相关参数的完整列表位于 session-descriptor 中。
配置生存期超过会话期间的应用程序 Cookie
要获得生存期更长的客户端用户数据,您可以编写自己的应用程序,通过 HTTP servlet API 在浏览器上创建和设置自己的 cookie。应用程序不应试图使用与 HTTP 会话关联的 cookie。您的应用程序可能会使用 cookie 以使用户从特定计算机自动登录,这样,您需要设置新的 cookie 以持续更长时间。请记住,只能从此特定客户端计算机发送 cookie。如果用户必须从多个位置进行访问,您的应用程序应该在服务器上存储数据。
您不能直接将浏览器 cookie 的期限与会话时间长度关联起来。否则,如果 cookie 在其关联会话之前过期,则会话会变得孤立。而如果会话在其关联 cookie 之前过期,则 servlet 无法找到该会话。这种情况下,当调用 request.getSession(true)
方法时,将自动分配一个新会话。
可以使用 weblogic.xml
部署描述符的会话描述符中的 cookie-max-age-secs
元素设置 cookie 的最大生命周期。请参阅 cookie-max-age-secs 。
退出和结束会话
用户身份验证信息既存储于用户会话数据中,也存储于 Web 应用程序所定位的服务器或虚拟主机的上下文中。通常用于使用户退出的 session.invalidate()
方法仅使用户的当前会话失效,用户身份验证信息仍有效,且存储于服务器或虚拟主机的上下文中。而如果服务器或虚拟主机仅承载一个 Web 应用程序,则 session.invalidate()
方法实际上会使用户退出。
针对多个 Web 应用程序使用身份验证时,有多种 Java 方法和策略可以使用。有关详细信息,请参阅退出和结束会话 。
使 Web 应用程序共享同一个会话
默认情况下,Web 应用程序不共享同一个会话。如果您希望 Web 应用程序共享同一个会话,您可以在 weblogic-application.xml
部署描述符中配置应用程序级别上的会话描述符。要使 Web 应用程序共享同一个会话,请将 weblogic-application.xml
部署描述符中会话描述符中的 sharing-enabled
特性设置为 true
。请参阅 session-descriptor 中的“sharing-enabled”。
应用程序级别上指定的会话描述符配置将替代在 Web 应用程序级别上为应用程序中所有 Web 应用程序指定的任何会话部署描述符配置。如果您在 Web 应用程序级别上将 sharing-enabled
特性设置为真,则将忽略该设置。