我正在与Apache Tomcat上6.0.20一个问题,即一旦它被添加到响应我不能改变一个cookie的值。基本上,我试图使用cookie复制会话功能。我有一个自定义的“会话”对象,它由一个cookie支持。当我创建我的Session时,我将它传递给一个HttpServletResponse,并创建并向响应添加一个空的cookie。然后,当我的代码调用Session.put()方法时,我想更改此cookie的值。Tomcat:1次请求多次设置cookie值?
我所看到的是,一旦该cookie已被添加到响应,以Cookie.setValue任何电话()是基本没用。使用调试器,我可以看到cookie本身正在被修改,但响应对象中的Set-Cookie头保持不变(它包含cookie的初始值,通常只是一个空字符串)。我甚至尝试创建一个新的cookie并将其重新添加到响应中,但这对Set-Cookie头也没有影响。
奇怪的是我用写在几年前由我们自己开发的库。在过去,我们使用JRun 3.1 Web服务器,所以我猜可能每个Web服务器都以不同的方式处理这些Cookie操作。
有没有人遇到过这个问题?我现在唯一能够保证工作的解决方案是不会将cookie添加到响应中,直到我确定完成了自定义Session对象。我可以创建一个名为Session.saveTo(HttpServletResponse)的方法,它将cookie添加到响应中。这有效,但我们的一些JSP可能非常复杂,所以我宁愿让Session“自动保存”在每次放置时都会忘记调用Session.saveTo()。
为了澄清,这是我在做什么有效:
Cookie cookie = new Cookie("custom-session", "initial");
response.addCookie(cookie); // Set-Cookie header has 'custom-session=initial'
cookie.setValue("new value"); // does not change Set-Cookie header
response.addCookie(cookie); // re-adding the same cookie, does not work either
了这一切后,我的浏览器创建一个cookie,其中定制会话“inital”,不到最后,我设定值。
什么版本的Tomcat? – 2009-09-10 13:57:21
看起来像Apache Tomcat/6.0.20 – 2009-09-10 14:02:49