【问题标题】:SRTServletRequest getSession(true) returns HttpSession with same sessionIdSRTServletRequest getSession(true) 返回具有相同 sessionId 的 HttpSession
【发布时间】:2018-02-22 14:22:01
【问题描述】:

我面临 HttpRequest.getSession(true) 的问题 - 在会话无效后多次调用时 - 这将返回具有新 HashCode 但会话 ID 相同的会话对象。

设置细节 -

JDK8 Websphere9.0 应用程序:两场战争:一场是基于 JSP Servlet 的应用程序,第二场是基于 Angular2 Spring 的应用程序 要求:部署在同一个 BLA EAR 中的两次战争之间,需要共享会话,因此使用 IBMApplicationSession 进行属性获取和设置调用 - 都在使用 HttpSession

如果我们正在处理 JSP Servlet Jar 应用程序的页面部分 - 下面的代码能够创建具有不同会话 ID 的新会话

1.HttpSession session = request.getSession(false);
//few other lines
2.session.invalidate();
//few other lines
3.session = request.getSession(true);

即最后的会话与我们无效的会话具有不同的会话 ID

但是,如果我们参加另一场包含 Angular2 和基于 spring 的应用程序的战争 - 我们创建一个 IBMapplicationSession 实例来存储属性(获取和设置属性调用) - 然后回到基于 JSP 的应用程序的战争 - 相同的代码行给出完全不同和奇怪的行为 - 第三行给出的会话对象与第 1 行的会话对象不同(哈希码不同) sessionId 在对象上保持不变

应用程序正在处理基于 sessionId 的会话 - 由于 sessionId 保持不变,这给我们带来了很大的麻烦。

即使我调用 request.getSession(true),有人可以帮助我知道如何使用相同的 ID 创建会话。需要注意的是 Request 实现是 websphere 插件 com.ibm.ws.webcontainer jar 的 SRTServletRequest 部分

提前感谢您的建议

【问题讨论】:

    标签: httprequest sessionid


    【解决方案1】:

    经过一番研究,我找到了以下文本 - 这有助于我解释 IBMApplicationSession 的性质

    使用 IBMApplicationSession 方法的好处是每个 Web 模块都可以维护自己的会话并引用共享会话。换句话说,来自客户端的多个请求(每个请求都指定一个唯一的 Web 应用程序)会导致多个会话具有共享的会话 ID。您可以使任何共享会话 ID 的会话无效,而不会影响其他会话。如果另一个 Web 应用程序正在使用该会话 ID,则来自客户端的新请求会重用该会话 ID。在会话 ID 的所有会话都失效后,如果没有 Web 应用程序正在使用该会话 ID,则来自客户端的新请求不会重用该会话 ID。

    IBM link

    在我的情况下,会话在一个应用程序中仍然处于活动状态(我们需要使其保持活动状态),同时转到第二个应用程序,反之亦然。因此,每当我们尝试创建新会话时,SESSIONID 保持不变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多