每个来自 JSP 的 servlet 请求都会创建新的 Session?

New Session is created with each servlet request from JSPs?

我有一个遗留 Java 1.6 运行 localhost 和 Tomcat 7 个应用程序,使用 JSP 个页面,一个带框架的框架集,javascript,但没有Struts 这样的框架。我使用请求或 session 从 servlet 传递一个 object 以显示在页面中,并且工作正常。

但是,我最近做了一些更改,现在我无法从 session 或请求中检索到相同的 object。它以前一直工作正常,所以我不确定是什么坏了,但我什至无法将字符串值从 JSP 发送回 servlet。

我创建了一个新的精简版 JSP,但我无法使用请求或 session 从中取回任何内容。当我将代码推送到我们的 Tomcat 6 网络服务器时,它会做同样的事情。使用调试器,我看到 object 填充在 session 中,但后来每次创建新的 session 时都会丢失,就像使用这个简单的代码获取 session编号:

System.out.println("The session id is: " + session.getId());

session ID 为:EB431C19B41957B2BB2EFC3DBAF32241

sessionid是:C9CBD30E84D5C93DF6114C1412AE5523 然后我在 Header 下的 firebug 中看到这个,响应 headers:

Set-CookieJSESSIONID=C9CBD30E84D5C93DF6114C1412AE5523; Path=/此处省略名称/;仅限 Http,

所以我知道 cookie 已设置。我还删除了 jquery 并尽可能地剥离了 jsp 代码,但这似乎不是问题所在。

我正在使用: HttpSession session = request.getSession(真);但使用 false 并不重要。

session.setAttribute("ObjNameList", objNameList);

context.xml 将 cookie 设置为 true,我们确实使用 response.sendRedirect,但前提是抛出错误,如:response.sendRedirect("Error.jsp"); 代码中没有 session 两者都无效。

我在 jsp 所做的就是使用类似以下内容发回表单:

document.formName.submit(); 效果很好。使用此代码尝试在 session 中设置一个简单的字符串也不起作用:

session.setAttribute("somevalue","someValue");

在此处的 servlet 中为我提供 null:

String val = (String) session.getAttribute("somevalue");

关于可能导致此问题的原因有什么想法吗?

结果:

原来是 url 的问题,实际上是一个打字错误,正如 BalusC 提到的,所以 session cookie 的路径在 jsp 之间不匹配和 servlet。

仔细检查对该 servlet 的请求 URL 是否与 session cookie 域和路径匹配。如果不匹配,那么浏览器将不会随请求一起发送 session cookie,服务器将认为无法建立 session,因此只会创建一个新的。

您可以在浏览器的 Web 开发者工具集的 HTTP 流量监视器中检查 cookie(在 Chrome/Firefox23+/IE9+ 中按 F12 并打开“网络”选项卡)。当一个新的 session 启动时,服务器必须返回一个带有 Set-Cookie header 的响应,其中包含 cookie 值和路径(以及隐式域)。当浏览器在同一域和路径上发送后续请求时,它必须通过 Cookie 请求 header.

传回该 cookie

另请参阅: