【发布时间】:2009-09-11 00:19:12
【问题描述】:
我在使用 Apache Tomcat 6.0.20 时遇到问题,一旦将 cookie 添加到响应中,我就无法更改它的值。基本上,我正在尝试使用 cookie 复制会话功能。我有一个由 cookie 支持的自定义“会话”对象。当我创建我的 Session 时,我将一个 HttpServletResponse 传递给它,它会创建一个空白 cookie 并将其添加到响应中。然后,当我的代码调用 Session.put() 方法时,我想更改这个 cookie 的值。
我看到的是,一旦将 cookie 添加到响应中,对 Cookie.setValue() 的任何调用基本上都是无用的。使用调试器,我可以看到 cookie 本身正在被修改,但响应对象中的 Set-Cookie 标头保持不变(它包含 cookie 的初始值,通常只是一个空字符串)。我什至尝试过创建一个新的 cookie 并将其重新添加到响应中,但这对 Set-Cookie 标头也没有影响。
奇怪的是,我使用的是我们自己的开发人员几年前编写的库。过去我们使用 JRun 3.1 网络服务器,所以我猜测可能每个网络服务器处理这些 cookie 操作的方式不同。
以前有人遇到过这个问题吗?我现在唯一可以保证工作的解决方案是在我确定我完成了我的自定义 Session 对象之前不将 cookie 添加到响应中。我可以创建一个名为 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,其中 custom-session 是“初始”,而不是我设置的最后一个值。
【问题讨论】:
-
看起来像 Apache Tomcat/6.0.20
标签: java jsp session tomcat cookies