HTTP 会话问题

使用与创建或运用超文本传输协议 (HTTP) 会话时所发生的问题有关的故障诊断信息。

要查看和更新在此讨论的会话管理器设置,请使用管理控制台。 选择主管有问题的应用程序的应用程序服务器,在“其他属性”下面选择 Web 容器,然后选择会话管理器

[AIX Solaris HP-UX Linux Windows][IBM i]如果此处未描述您的问题,或者以下步骤均未修复该问题:

未创建 HTTP 会话,或者会话在请求之间丢失了

缺省情况下,会话管理器在请求之间使用 cookie 在客户机上存储会话标识。 除非您打算避免基于 cookie 的会话跟踪,否则请确保 cookie 在 WebSphere Application Server 与浏览器之间流动:
  • 确保选中“会话跟踪机制”属性下的启用 Cookie 复选框。
  • 确保您正在测试的浏览器或者用户正在从其访问应用程序的浏览器上启用了 cookie。
  • 检查 SessionManager上指定的 Cookie 域。 要查看或更新 cookie 设置,请在 会话跟踪机制 > 启用 cookie 属性中单击 修改
    • 例如,如果 cookie 域设置为 .myCom.com,那么应使用该域名访问资源。 示例: https://www.myCom.com/myapp/servlet/sessionservlet。
    • 如果设置了域属性,请确保它以点 (.) 开头。 如果域名未以点开头,那么较旧的浏览器可能不接受 cookie。 最近浏览器使用带点或不带点的域。 例如,如果域名设置为 mycom.com,请将其更改为 。mycom.com ,以便所有浏览器都遵守 cookie。
      注: 当服务器位于不同的主机上时,请通过配置前端路由器 (例如,具有插件的 Web 服务器) 或设置 Cookie 域来确保会话 Cookie 流向所有服务器。
  • 检查会话管理器中指定的 Cookie 路径。 检查问题 URL 是否在指定的 Cookie 路径下分层。 如果不是分层的,那么更正此 Cookie 路径。
  • 如果设置了“Cookie 最大寿命”属性,请确保客户机(浏览器)的日期和时间(包括时区)与服务器相同。 如果客户机和服务器时间差超过 Cookie 最大时效 ,那么每次访问都将是一个新会话,因为 cookie 将在访问后到期。
  • 如果企业应用程序中有多个跟踪会话的 Web 模块:
    • 如果您希望企业应用程序中的各个 Web 模块采用不同的会话设置,请确保每个 Web 模块指定不同的 Cookie 名称或路径,或者
    • 如果企业应用程序中的 Web 模块使用公共 cookie 名称和路径,请确保所有 Web 模块的 HTTP 会话设置 (例如 Cookie 最大时效) 相同。 否则,cookie 行为将是不可预测的,并取决于创建会话的应用程序。 请注意,这不会影响由 Web 模块独立维护的会话数据。
  • 检查浏览器和服务器之间的 cookie 流:
    1. 在浏览器上,启用 cookie 提示。 命中 servlet 并确保 cookie 被提示。
    2. [AIX Solaris HP-UX Linux Windows][IBM i]在服务器上,启用 SessionManager 跟踪。 使用跟踪规范 com.ibm.ws.session. * = all=enabled对 HTTP 会话管理器组件启用跟踪。 启用跟踪后,请使用 servlet 或 JSP 来执行会话,然后遵循有关转储和浏览跟踪输出的指示信息。
    3. 从浏览器访问会话 servlet。
    4. 浏览器将提示 cookie;记下 jsessionid。
    5. 重新装入 servlet,如果发送了新 cookie,那么记下此 cookie。
    6. 检查会话跟踪,并通过线程查找会话标识及跟踪请求。 验证该会话是否在各 Web 请求中保持稳定:
      • 查找作为会话请求启动的 getIHttpsession(...)。
      • 查找作为 servlet 请求结束的 releaseSession(..)。
  • 如果正在使用 URL 重写而不是 cookie:
    • 则确保在应用程序导航路径中没有静态 HTML 页面。
    • [AIX Solaris HP-UX Linux Windows][IBM i]确保 servlet 和 JSP 文件正确实现 URL 重写。 有关详细信息和示例,请参阅 会话跟踪选项
  • 不推荐使用的功能: 在 WebSphere Application Server V 7.0中不推荐使用 SSL 标识进行会话跟踪。 可以配置会话跟踪以使用 cookie 或修改应用程序以使用 URL 重写。
    如果正在使用 SSL 作为会话跟踪机制:
    • 确保在 IBM HTTP Server 或 iPlanet HTTP Server 上启用了 SSL。
    • [AIX Solaris HP-UX Linux Windows][IBM i]复审 会话跟踪选项

会话在同一台客户端机器上跨多个浏览器共享。

此行为是浏览器从属的。 它因浏览器供应商而异,也可能根据浏览器是作为新进程启动,还是作为现有浏览器会话的子进程启动 (例如,通过在 Windows 上点击 Ctl-N) 而改变。

如果将 cookie 用作会话跟踪机制,会话 管理器的 Cookie 最大寿命属性会影响此行为。 如果最大寿命设置为某个正值,那么所有浏览器实例共享这些 cookie,这些 cookie 对于指定最大寿命时间的客户机上的文件来说是持久的。

会话在经过指定的会话超时时间间隔后没有立即失效

会话管理器失效进程线程每 x 秒运行一次,以使任何无效会话失效,其中 x 是根据会话管理器属性中指定的会话超时间隔确定的。 对于缺省值 30 分钟,x 约为 300 秒。 在这种情况下,特定的会话可能需要比 30 分钟超时阈值最多长 5 分钟(300 秒)的时间才能失效。

JavaServer Pages 创建了不需要的会话

按 JavaServer Pages (JSP) 规范的要求,JSP 页在缺省情况下执行 request.getSession(true),以便在客户机不存在会话的情况下创建会话。 要阻止 JSP 页面创建新会话,请使用 page 伪指令在 .jsp 文件中将会话作用域设置为 false ,如下所示:
<% @page session="false" %>
[AIX Solaris HP-UX Linux Windows][IBM i]

用于某个客户机的会话数据对另一个客户机可见

在罕见情况下,(通常由于应用程序错误)用于某个客户机的会话数据可能对另一个客户机可见。 此种情况称为会话数据交叉。 将 DebugSessionCrossover 定制属性设置为 true 后,代码将能够检测并记录会话数据交叉实例。 执行检查以验证是否仅访问或引用了与请求关联的会话。 如果检测到任何差异,那么记录消息。 这些消息提供了用于调试问题的起始点。 仅当在管理 WebSphere 的分派线程上(而不是在任何用户创建的线程上)运行时,执行此附加检查。

有关如何设置此属性的其他信息,请参阅 Web 容器定制属性

此外,如果您正在使用 Java 代理或 Java On Demand Router ,那么可以考虑使用 http.cache.nocache.headers="Set-Cookie,Set-Cookie2"cache.query.string=true 进行测试 (请参阅 HTTP 代理服务器定制属性 以获取更多信息)-OR-uncheck Enable caching 以完全禁用高速缓存 (请参阅 代理服务器设置 以获取更多详细信息)。 这些更改中的任何一项都可能对性能产生影响,应该事先进行测试。

在 HTTP 会话计时器到期后,用户未注销

如果 WebSphere Application Server 的用户登录到应用程序,并且空闲时间超过指定的 HTTP 会话超时值,那么用户信息不会失效,并且用户凭证将保持活动状态,直到发生 LTPA 令牌超时为止。

完成以下步骤以在 HTTP 会话到期后从应用程序注销用户。
注意: com.ibm.ws.security.web.logoutOnHTTPSessionExpire 属性仅适用于使用表单登录的应用程序。
  1. 在管理控制台中,单击安全性 > 全局安全性
  2. 在“定制属性”下,单击新建
  3. 在“名称”字段中,输入 com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
  4. 在“值”字段中,输入 true。
  5. 单击“应用”和“保存”以保存对配置的更改。
  6. 再同步并重新启动服务器。
意外的重新认证: 当您将 com.ibm.ws.security.web.logoutOnHTTPSessionExpire 定制属性设置为 true 时,当您使用多个 Web 应用程序时,可能会发生意外的重新认证。 缺省情况下,每个 Web 应用程序都有自己的唯一 HTTP 会话,但 Web 浏览器只有一个会话 Cookie。 为解决此问题,可以更改 HTTP 会话配置,方法是为每个应用程序提供一个唯一的会话 cookie 名称或路径设置。 结果,每个应用程序都将得到自己的会话 cookie。 另外,也可以将多个具有同一个企业应用程序的 Web 应用程序配置为共享同一个 HTTP 会话。 有关更多信息,请参阅“组装以便可以共享会话数据”主题。

在运行时,对启用了会话持久性的应用程序进行更新时可能会发生异常

如果用户启用了会话持久性,并且在运行时运行应用程序更新,那么在应用程序重新启动后,可能会遇到意外的异常。

如果所作的更新对保存的属性进行更改,并且相关联的应用程序无法处理这些更改,那么可能必须先使该应用程序创建的所有会话失效,然后才能进行应用程序更新。 在这种情况下,还必须从后端移除所有会话对象。 请参阅 HTTP 会话失效信息,以了解更多关于如何正确移除这些会话的信息。

IBM 支持机构提供了一些文档和工具,可节省您收集解决问题所需的信息的时间。 打开问题报告之前,请参阅支持页面: