HTTP 会话问题
使用与创建或运用超文本传输协议 (HTTP) 会话时所发生的问题有关的故障诊断信息。
要查看和更新在此讨论的会话管理器设置,请使用管理控制台。 选择主管有问题的应用程序的应用程序服务器,在“其他属性”下面选择 Web 容器,然后选择会话管理器。
- 审查HTTP 会话管理器故障排除技巧了解调试会话管理器相关问题的一般步骤。
审查配置 HTTP 会话有关如何配置会话管理器以及使用它的最佳实践的信息。
- 检查问题是否已被识别并记录下来可用的在线支持(提示和技巧、技术说明和修复) 。
- 如果你没有找到你的问题接触IBM支持。
未创建 HTTP 会话,或者会话在请求之间丢失了
- 确保选中“会话跟踪机制”属性下的启用 Cookie 复选框。
- 确保您正在测试的浏览器或者用户正在从其访问应用程序的浏览器上启用了 cookie。
- 检查在SessionManager。 要查看或更新 Cookie 设置,请在, 点击调整。
- 例如,如果 cookie 域设置为
.myCom .com
,应该使用该域名来访问资源。 例子: https://www.myCom.com/myapp/servlet/sessionservlet。 - 如果设置了域属性,请确保它以点 (.) 开头。如果域名不以点开头,旧版浏览器可能不会接受 Cookie。 最近的浏览器都支持带点或不带点的域名。 例如,如果域名设置为mycom.com,将其更改为。 mycom.com以便所有浏览器都支持该 cookie。笔记:当服务器位于不同的主机上时,请通过使用插件配置前端路由器(例如 Web 服务器)或设置 Cookie 域来确保会话 Cookie 流向所有服务器。
- 例如,如果 cookie 域设置为
- 检查会话管理器中指定的 Cookie 路径。 检查问题 URL 是否在指定的 Cookie 路径的层级结构之下。 如果不是分层的,那么更正此 Cookie 路径。
- 如果设置了“Cookie 最大寿命”属性,请确保客户机(浏览器)的日期和时间(包括时区)与服务器相同。 如果客户端和服务器的时间差超过
Cookie 最大使用期限
那么每次访问都会是一个新的会话,因为 cookie 会在访问后过期。 - 如果企业应用程序中有多个跟踪会话的 Web 模块:
- 如果您希望企业应用程序中的各个 Web 模块采用不同的会话设置,请确保每个 Web 模块指定不同的 Cookie 名称或路径,或者
- 如果企业应用程序中的 Web 模块使用通用的 Cookie 名称和路径,请确保 HTTP 会话设置(例如
Cookie 最大使用期限
,对于所有 Web 模块都是相同的。 否则,cookie 行为将是不可预测的,并取决于创建会话的应用程序。 请注意,这不会影响由 Web 模块独立维护的会话数据。
- 检查浏览器和服务器之间的 cookie 流:
- 在浏览器上,启用
cookie 提示
。 命中 servlet 并确保 cookie 被提示。 在服务器上,启用SessionManager痕迹。 使用跟踪规范启用 HTTP 会话管理器组件的跟踪
com.ibm.ws.session.*=全部=已启用
。 启用跟踪后,使用 servlet 或 JSP 练习您的会话,然后按照转储和浏览跟踪输出的说明进行操作。- 从浏览器访问会话 servlet。
- 浏览器将提示 cookie;记下 jsessionid。
- 重新装入 servlet,如果发送了新 cookie,那么记下此 cookie。
- 检查会话跟踪,并通过线程查找会话标识及跟踪请求。 验证该会话是否在各 Web 请求中保持稳定:
- 寻找getIHttpsession( ...)这是会话请求的开始。
- 寻找releaseSession( ..) 即 servlet 请求的结束。
- 在浏览器上,启用
- 如果正在使用 URL 重写而不是 cookie:
- 则确保在应用程序导航路径中没有静态 HTML 页面。
确保您的 servlet 和 JSP 文件正确实现 URL 重写。 有关详细信息和示例,请参阅会话跟踪选项。
- 已弃用的功能:使用 SSL ID 的会话跟踪已弃用WebSphere Application Server版本7.0 。 可以配置会话跟踪以使用 cookie 或修改应用程序以使用 URL 重写。如果正在使用 SSL 作为会话跟踪机制:
- 确保您已在您的IBM HTTP Server或者iPlanetHTTP 服务器。
审查会话跟踪选项。
- 如果您处于集群(多节点)环境中,请确保您已会话持久性已启用。
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" %>用于某个客户机的会话数据对另一个客户机可见
在罕见情况下,(通常由于应用程序错误)用于某个客户机的会话数据可能对另一个客户机可见。 此种情况称为会话数据交叉。 将 DebugSessionCrossover 定制属性设置为 true 后,代码将能够检测并记录会话数据交叉实例。 执行检查以验证是否仅访问或引用了与请求关联的会话。 如果检测到任何差异,那么记录消息。 这些消息提供了用于调试问题的起始点。 仅当在管理 WebSphere 的分派线程上(而不是在任何用户创建的线程上)运行时,执行此附加检查。
有关如何设置此属性的其他信息,请参阅Web 容器定制属性。
此外,如果您正在使用 Java Proxy 或 Java On Demand Router,您可以考虑使用以下任一方式进行测试http.cache.nocache.headers="Set-Cookie,Set-Cookie2"和cache.query.string=true(看HTTP 代理服务器定制属性了解更多信息)- 或 - 取消选中Enable caching完全禁用缓存(参见代理服务器设置更多细节)。 这两种变化都会对性能产生影响,因此应该事先进行测试。
在 HTTP 会话计时器到期后,用户未注销
如果用户WebSphere Application Server登录到应用程序并且闲置的时间超过指定的 HTTP 会话超时值,则用户信息不会失效,并且用户凭证保持有效,直到发生 LTPA 令牌超时。
com.ibm.ws.security.web.logoutOnHTTPSessionExpire属性仅适用于使用表单登录的应用程序。- 在管理控制台中,单击安全性 > 全局安全性。
- 在“定制属性”下,单击新建。
- 在“名称”字段中,输入 com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
- 在“值”字段中,输入 true。
- 单击“应用”和“保存”以保存对配置的更改。
- 再同步并重新启动服务器。
在运行时,对启用了会话持久性的应用程序进行更新时可能会发生异常
如果用户启用了会话持久性,并且在运行时运行应用程序更新,那么在应用程序重新启动后,可能会遇到意外的异常。
如果所作的更新对保存的属性进行更改,并且相关联的应用程序无法处理这些更改,那么可能必须先使该应用程序创建的所有会话失效,然后才能进行应用程序更新。 在这种情况下,还必须从后端移除所有会话对象。 请参阅 HTTP 会话失效信息,以了解更多关于如何正确移除这些会话的信息。
IBM支持部门提供文档和工具,可以节省您收集解决问题所需信息的时间。 打开问题报告之前,请参阅产品支持页面: https://www.ibm.com/mysupport/s/topic/0TO500000001DQQGA2/websphere-application-server。