我正在使用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重写?
连连呢?
答案 0 :(得分:1)
确保会话ID包含在每个网址中。如果JSP中存在缺少会话ID的URL,则不会将会话ID报告回servlet,并且servlet将生成新的会话ID。只要包含会话ID,就只能识别和维护会话。
在servlet中,始终使用这两种方法添加会话ID:HttpServletResponse#encodeURL HttpServletResponse#encodeRedirectURL。
在JSP中,您可以使用类似<c:url>标记的内容。或者,您可以手动获取会话ID,并在查询字符串之前的URL末尾添加;jsessionid=xxx
。