HTTP 会话问题
使用与创建或运用超文本传输协议 (HTTP) 会话时所发生的问题有关的故障诊断信息。
要查看和更新在此讨论的会话管理器设置,请使用管理控制台。选择主管有问题的应用程序的应用程序服务器,在“其他属性”下面选择 Web 容器,然后选择会话管理器。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- 查看HTTP 会话管理器故障诊断技巧,以了解调试与会话管理器相关的问题的一般步骤。
查看任务概述:管理 HTTP 会话以获取有关如何配置会话管理器的信息以及使用它的最佳实践。
- 通过查看可用在线支持(提示与技巧、技术说明和修订)检查是否已标识和记录了此问题。
- 如果您发现问题未在此处列出,请联系 IBM 技术支持。
未创建 HTTP 会话,或者会话在请求之间丢失了
- 确保选中“会话跟踪机制”属性下的启用 Cookie 复选框。
- 确保您正在测试的浏览器或者用户正在从其访问应用程序的浏览器上启用了 cookie。
- 检查会话管理器中指定的 Cookie 域(要查看或更新 Cookie 设置,请在修改)。
- 例如,如果 Cookie 域设置为“.myCom.com”,那么应该使用此域名来访问资源。例如:http://www.myCom.com/myapp/servlet/sessionservlet。
- 如果设置了域属性,那么确保它是以点 (.) 开始的。如果域名不以点开始,那么 Netscape 的某些版本不接受 cookie。
Internet Explorer 接受带有点或不带点的域。例如,如果域名设置为 mycom.com,那么将它更改为 .mycom.com,这样 Netscape 和 Internet Explorer 都能接受 cookie。注: 如果各个服务器位于不同的主机上,请通过配置前端路由器(例如带插件的 Web 服务器)或设置 Cookie 域确保会话 Cookie 流向所有服务器。
中,单击 - 检查会话管理器中指定的 Cookie 路径。检查有问题的 URL 在层次结构上是否在指定的 Cookie 路径下面。如果不是分层的,那么更正此 Cookie 路径。
- 如果设置了“Cookie 最大寿命”属性,请确保客户机(浏览器)的日期和时间(包括时区)与服务器相同。如果客户机与服务器之间的时差超过“Cookie 最大寿命”,那么每次访问都将是新会话,这是因为该访问完成后 Cookie 将到期。
- 如果企业应用程序中有多个跟踪会话的 Web 模块:
- 如果您希望企业应用程序中的各个 Web 模块采用不同的会话设置,请确保每个 Web 模块指定不同的 Cookie 名称或路径,或者
- 如果企业应用程序中的 Web 模块使用公共 Cookie 名称和路径,请确保对于所有 Web 模块,HTTP 会话设置(例如“Cookie 最大寿命”)相同。否则,cookie 行为将是不可预测的,并取决于创建会话的应用程序。请注意,这不会影响由 Web 模块独立维护的会话数据。
- 检查浏览器和服务器之间的 cookie 流:
- 在浏览器中,启用“Cookie 提示”。命中 servlet 并确保 cookie 被提示。
在服务器上,启用会话管理器跟踪。通过使用跟踪规范“com.ibm.ws.session.*=all=enabled”,对 HTTP 会话管理器组件启用跟踪。启用跟踪后,使用 servlet 或 JSP 运用会话,然后遵循指示信息以对跟踪输出进行转储和浏览。
- 从浏览器访问会话 servlet。
- 浏览器将提示 cookie;记下 jsessionid。
- 重新装入 servlet,如果发送了新 cookie,那么记下此 cookie。
- 检查会话跟踪,并通过线程查找会话标识及跟踪请求。验证该会话是否在各 Web 请求中保持稳定:
- 查找 getIHttpsession(...),这是会话请求的开头。
- 查找 releaseSession(..),这是 Servlet 请求的末尾。
- 如果正在使用 URL 重写而不是 cookie:
- 则确保在应用程序导航路径中没有静态 HTML 页面。
确保您的 servlet 和 JSP 文件正确实现 URL 重写。有关详细信息和示例,请查看会话跟踪选项。
- 如果正在使用 SSL 作为会话跟踪机制:
不推荐使用的功能部件: 不推荐在 WebSphere Application Server V7.0 中使用 SSL 标识来进行会话跟踪。可以配置会话跟踪以使用 cookie 或修改应用程序以使用 URL 重写。depfeat
- 确保在您的 IBM HTTP Server 或 iPlanet HTTP Server 上已启用 SSL。
查看会话跟踪选项。
- 如果您在集群(多节点)环境中,请确保已启用会话持久性。
HTTP 会话不是持久的
- 检查数据源。
- 检查会话管理器的持久性设置属性:
- 如果要利用会话持久性,那么验证是否已将“持久性”设置为数据库。
还可以将持久性设置为内存到内存复制。
- 如果要使用基于数据库的持久性,请执行下列操作:
- 检查是否对 SessionManager 正确指定了数据源的 JNDI 名称。
- 指定访问数据库的正确用户标识和密码。
注意,针对管理控制台中的现有数据源,必须检查这些设置。会话管理器不会自动创建会话数据库。
- 数据源应该是非 JTA 的,例如启用非 XA。
检查 JVM 日志是否存在相应的数据库错误消息。
检查日志是否存在相应的数据库错误消息。
- 使用 DB2® 时,对于不是 4k 的行大小,请确保指定的行大小与 DB2 页大小相匹配。确保正确指定表空间名。
- 如果正在使用基于内存的持久性(只在 Network Deployment 环境中可用):
- 请查看内存到内存复制。
- 查看会话管理器的“内部复制域”属性。
会话在同一台客户端机器上跨多个浏览器共享。
此行为是浏览器从属的。它因浏览器提供商而异,并且还可能根据浏览器是作为新进程还是作为现有浏览器会话的子进程启动(例如,通过在 Windows 上按 Ctl-N)而有所变化。
如果将 cookie 用作会话跟踪机制,会话 管理器的 Cookie 最大寿命属性会影响此行为。如果最大寿命设置为某个正值,那么所有浏览器实例共享这些 cookie,这些 cookie 对于指定最大寿命时间的客户机上的文件来说是持久的。
会话在经过指定的会话超时时间间隔后没有立即失效
会话管理器失效进程线程每 x 秒运行一次,以使任何无效会话失效,其中 x 是根据会话管理器属性中指定的会话超时间隔确定的。对于缺省值 30 分钟,x 约为 300 秒。在这种情况下,特定的会话可能需要比 30 分钟超时阈值最多长 5 分钟(300 秒)的时间才能失效。
JavaServer Pages 创建了不需要的会话
<% @page session=“false” %>
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
用于某个客户机的会话数据对另一个客户机可见
在罕见情况下,(通常由于应用程序错误)用于某个客户机的会话数据可能对另一个客户机可见。 此种情况称为会话数据交叉。将 DebugSessionCrossover 定制属性设置为 true 后,代码将能够检测并记录会话数据交叉实例。执行检查以验证是否仅访问或引用了与请求关联的会话。如果检测到任何差异,那么记录消息。这些消息提供了用于调试问题的起始点。仅当在管理 WebSphere 的分派线程上(而不是在任何用户创建的线程上)运行时,执行此附加检查。
有关如何设置此属性的其他信息,请参阅文章Web 容器定制属性。
在 HTTP 会话计时器到期后,用户未注销
如果 WebSphere Application Server 的用户在登录到应用程序后保持闲置的时间超过了指定的 HTTP 会话超时值,那么在发生 LTPA 令牌超时之前,用户信息将保持有效且用户凭证保持活动。
- 在管理控制台中,单击安全性 > 全局安全性。
- 在“定制属性”下面,单击新建。
- 在“名称”字段中,输入 com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
- 在“值”字段中,输入 true。
- 单击“应用”和“保存”以保存对配置的更改。
- 再同步并重新启动服务器。
在运行时,对启用了会话持久性的应用程序进行更新时可能会发生异常
如果用户启用了会话持久性,并且在运行时运行应用程序更新,那么在应用程序重新启动后,可能会遇到意外的异常。
如果所作的更新对保存的属性进行更改,并且相关联的应用程序无法处理这些更改,那么可能必须先使该应用程序创建的所有会话失效,然后才能进行应用程序更新。在这种情况下,还必须从后端移除所有会话对象。请参阅 HTTP 会话失效信息,以了解更多关于如何正确移除这些会话的信息。