我正在使用Tomcat上的JSP / servlets开发一个简单的Web应用程序。 我有一个index.jsp页面,它提供了UI并加载了JS代码,使得重复的“轮询”AJAX请求 - 简单的东西。
问题是每个ajax请求都返回一个新的jsessionid,因此每次尝试存储在会话对象中的数据都会丢失。
这个问题不会发生在我直接调用tomcat的dev机器上,它只发生在请求通过Apache的staging / live环境中(在我的dev机器上我调用localhost ... / path / index.jsp和localhost ... / path / ajax.jsp - 在live env apache中将domain.com路由到domain.com/path/index.jsp,将domain.com/ajax.jsp路由到domain.com/path/ajax.jsp)
我验证了我没有在任何地方配置useHttpOnly param或useCookies。我们正在使用tomcat 6 BTW。
这可能是一个apache-tomcat交互问题吗?
感谢您的帮助!
答案 0 :(得分:2)
这可能是Cookie路径的问题。也许会话cookie与domain.com/path绑定。但从浏览器的角度来看,路径是domain.com /
将cookie路径设置为/将使浏览器也将cookie发送到domain.com/。
您可以在Firebug / Fiddler中检查Cookie并在此处发布内容吗?
答案 1 :(得分:1)
不幸的是,Servlet API是 在创建会话时相当自由。 各种工具都有默认行为 它可以隐式创建会话 在后台。这很容易 申请“意外” 创建一个会话,即使是一个会话 没有明确要求。
一个例子,JSP经常会创建 一个会话,如果还没有 存在。这允许JSP使用 隐式会话变量。作为第二个 例如,request.getSession() 方法也会自动创建 一个会话,如果还没有 存在。
我认为问题的原因如上所述
答案 2 :(得分:0)
在index.jsp的顶部尝试<%@ page session="false" %>
。如果这样做,那么找到另一种方法来存储值(在请求范围内)