【问题标题】:request.getSession() always returning new session id inspite of using URL rewritingrequest.getSession() 总是返回新的会话 ID,尽管使用 URL 重写
【发布时间】:2014-03-25 03:54:50
【问题描述】:

我正在使用禁用 cookie 的 Firefox 浏览器。现在,对于生成会话 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 重写是否应该有所不同?

建议?

【问题讨论】:

  • 在生成表单动作的 URL 时是否使用 URL 重写?这是需要对应用程序生成的每个 URL 执行的操作。向我们展示表单的代码。
  • 您指出的是正确的。 servlet 中的所有内容都是正确的。 jsp 中的动作实际上需要像
    method="post">
    这样编码

标签: java session servlets


【解决方案1】:

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

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

在 JSP 中,您可以使用 <c:url> 标签之类的东西。或者,您可以手动获取会话 ID 并将 ;jsessionid=xxx 附加到 URL 末尾的查询字符串之前。

【讨论】:

  • servlet 中的所有内容都是正确的。 jsp 中的动作实际上需要像
    method="post"> 这样编码。感谢收看。
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 2014-03-30
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多