为什么我有多个具有相同sessionID的会话?

时间:2019-05-07 10:47:56

标签: java http jsp session login

我有一个index.jsp作为我网站的起始页,成功登录后,它将用户导航到main.jsp。 第二页上有一个注销按钮,当按下该按钮时,将调用Servlet Logout.jsp,并且将在其doPost()方法内执行以下两行:

request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/index.jsp");

在我的网页上,用户可以访问某些Web服务,并且我将使用情况存储在数据库中,并将sessionID作为唯一标识符。 直到用户发现浏览器的“返回”按钮,或者手动导航回myWebpage / index.jsp为止,此方法都可以正常工作。这样,他可以使用其他用户登录,但sessionID不会更改。这会导致数据库混乱。

我尝试将以下代码作为第一行添加到index.jsp的开头,以使当前sessionID无效:

<%
    session.invalidate();
    /* Stops the page from loading */
    // session = request.getSession(true); 
%>

此“解决方案”的问题在于,身份验证过程将具有与用户登录后的用户操作不同的sessionID,但最让我困扰的是,这不会阻止用户已经拥有使用的sessionID。

登录前的SessionID(index.jsp)
05A57EB92439AF875DA55714CBBA4152

登录后的SessionID(main.jsp)
48F16265C66B86AAD1C7AF0A5705CF5E

注销后的SessionID(index.jsp)
55835EC4EAA7EC5F4FB8D4E352248A7D <-1)

第二次登录(main.jsp)后
F198DB58BAD0E7D819A0391042F94741 <-2)

-一切都预期-

浏览器返回后(index.jsp)
55835EC4EAA7EC5F4FB8D4E352248A7D <-1)
这是上次访问index.jsp时的sessionID。

第三次登录(main.jsp)后
F198DB58BAD0E7D819A0391042F94741 <-2)
这是上次访问main.jsp以来的sessionID。

sessionID不应该是唯一的吗?我能以某种方式理解为什么第一个ID相同,但是为什么它看起来像是有一个分配ID的模式呢?

1 个答案:

答案 0 :(得分:0)

您可以使用HttpSession.getSession(boolean create)。在这里,create具有两个值 true -to create a new session for this request if necessary false -{{1 }}。例如:-

to return null if there's no current session

有关更多信息,请检查 here