为什么tomcat会为每个请求创建一个会话cookie?

时间:2011-03-17 05:32:17

标签: jsp session tomcat cookies

我正在使用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交互问题吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

这可能是Cookie路径的问题。也许会话cookie与domain.com/path绑定。但从浏览器的角度来看,路径是domain.com /

将cookie路径设置为/将使浏览器也将cookie发送到domain.com/。

您可以在Firebug / Fiddler中检查Cookie并在此处发布内容吗?

答案 1 :(得分:1)

  

不幸的是,Servlet API是   在创建会话时相当自由。   各种工具都有默认行为   它可以隐式创建会话   在后台。这很容易   申请“意外”   创建一个会话,即使是一个会话   没有明确要求。

     

一个例子,JSP经常会创建   一个会话,如果还没有   存在。这允许JSP使用   隐式会话变量。作为第二个   例如,request.getSession()   方法也会自动创建   一个会话,如果还没有   存在。

     

http://www.javapractices.com/topic/TopicAction.do?Id=191

我认为问题的原因如上所述

答案 2 :(得分:0)

在index.jsp的顶部尝试<%@ page session="false" %>。如果这样做,那么找到另一种方法来存储值(在请求范围内)