request.getSession()总是返回新的会话ID,尽管使用URL重写

时间:2014-02-23 17:21:56

标签: java session servlets

我正在使用Firefox浏览器禁用cookie。现在,对于生成会话ID的第一次命中,我可以看到附加到URL的新会话ID - 38E838B8D401E9E03DF93D5DFC10260C。但是在下一个请求中,再次生成一个新的id - A1C93B0A9B28E4BDCD9D5B0DA3793D15,从而再次创建一个全新的会话。我正在使用encodeRedirectURL()进行URL重写。这是我的代码:

Servlet Code:
HttpSession session = req.getSession();
if(session.isNew()){//this is always returning new
   System.out.println("New Session created");
}
String contextPath = req.getContextPath();
resp.sendRedirect(resp.encodeRedirectURL(contextPath+"/chapter6/Authenticated2.jsp"));

在Authenticated2.jsp上我可以看到附加到URL的jsession id。但是在随后的jsp命中按钮的请求中,当流程进入Servlet代码时,它会生成一个新的会话ID。是否应该以不同的方式完成URL重写?

连连呢?

1 个答案:

答案 0 :(得分:1)

确保会话ID包含在每个网址中。如果JSP中存在缺少会话ID的URL,则不会将会话ID报告回servlet,并且servlet将生成新的会话ID。只要包含会话ID,就只能识别和维护会话。

在servlet中,始终使用这两种方法添加会话ID:HttpServletResponse#encodeURL HttpServletResponse#encodeRedirectURL

在JSP中,您可以使用类似<c:url>标记的内容。或者,您可以手动获取会话ID,并在查询字符串之前的URL末尾添加;jsessionid=xxx