我有一个使用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?
答案 0 :(得分:1)
WebSphere可以在以下两种情况之一中重用会话ID:
HttpSessionIdReuse
属性已明确配置为true
这不是一个错误,你的会话仍然是唯一的,它只是被重用的ID。有一些有效的理由这样做,但它也可能导致应用程序中的奇怪行为,这些行为假设会话ID总是被重新生成。
答案 1 :(得分:1)
在某些情况下,Websphere会话管理器将在创建新的HTTP会话时重用SessionID,
设置" UseInvalidatedId"为" false"的价值在JVM中更新会话ID
答案 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