会话失效后创建新会话

时间:2015-02-24 18:58:43

标签: session java-ee servlets websphere

我有一个使用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?

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

在某些情况下,Websphere会话管理器将在创建新的HTTP会话时重用SessionID,

设置" UseInvalidatedId"为" false"的价值在JVM中更新会话ID

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

答案 2 :(得分:0)

你的第二个片段甚至不应该起作用: 如果您之前确实声明了Session session = request.getSession();,那么session不应该编译,如果是这种情况,那么您只是重复使用之前的session变量,导致重复会话ID ;

答案 3 :(得分:0)

你在运行哪个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