【问题标题】:Creating a new session after session invalidation会话失效后创建新会话
【发布时间】:2015-04-26 13:27:34
【问题描述】:

我有一个使用 JSP 和 Servlet 并部署在 WebSphere 中的遗留应用程序。

我在服务器端创建了一个新会话

Session session = request.getSession();
System.out.println(session.getSessionId());

这将为我创建一个新会话。我打印 sessionid。

现在我使这个会话无效,然后创建一个新会话并尝试打印新会话的新会话 ID。

session.invalidate()
Session session = request.getSession();
System.out.println(session.getSessionId());

第二次创建确实创建了一个新的会话对象,因为它通过了isnew() 测试。但第二个会话也打印相同的 sessionId。

我认为 sessionId 是独一无二的。第二个会话是否应该与第一个会话具有相同的 sessionId?

【问题讨论】:

标签: session jakarta-ee servlets websphere


【解决方案1】:

Websphere Session Manager 在某些情况下会在创建新的 HTTP 会话时重用 SessionID,

在 JVM 中将“UseInvalidatedId”设置为“false”以更新会话 ID

http://www-01.ibm.com/support/docview.wss?uid=swg21179195

【讨论】:

    【解决方案2】:

    WebSphere 可以在以下两种情况之一重用会话 ID:

    • 会话管理器的HttpSessionIdReuse 属性显式配置为true
    • 会话持久性已启用

    这不是错误,您的会话仍然是唯一的,只是被重复使用的 ID。这样做有一些正当的理由,但它也可能导致应用程序出现奇怪的行为,假设会话 ID 总是被重新生成。

    【讨论】:

      【解决方案3】:

      您运行的是哪个 WAS 版本?当我运行 8.5.5.3 时,你一定做错了什么,它运行得很好。

      我有以下代码:

          HttpSession session = request.getSession();
          System.out.println("1: " + session.getId());
          session.invalidate();
          session = request.getSession();
          System.out.println("2: " + session.getId());
          session.invalidate();
          session = request.getSession(true);
          System.out.println("3: " + session.getId());
          session.invalidate();
          session = request.getSession(false);
          System.out.println("4: " + ((session == null)?"Null":(""+session.getId())));
      

      产生以下输出:

      [] 00000078 SystemOut     O 1: 3Mg4G9_ykUlsWA3zb2jroLM
      [] 00000078 SystemOut     O 2: jY912QW4elk_-7Tbr-5_RHz
      [] 00000078 SystemOut     O 3: mEeXsmodb7pKtuK-wu48joQ
      [] 00000078 SystemOut     O 4: Null
      

      【讨论】:

        【解决方案4】:

        你的第二个 sn-p 甚至不应该工作: Session session = request.getSession(); 不应该编译,如果你之前真的声明了 session 并且如果是这样的话,你只是在重复使用之前相同的 session 变量,导致会话 id 的重复;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-01
          • 1970-01-01
          • 2013-06-29
          • 2011-01-19
          • 2021-03-14
          相关资源
          最近更新 更多