调用具有相同cookie名称的HttpServletResponse.addCookie()是否安全?

时间:2010-07-07 08:37:37

标签: java servlets

正在调用

HttpServletResponse.addCookie();

(来自servlet-api-2.5)多次使用同名的cookie安全吗?

在某种意义上是安全的,例如存在确定性行为,例如:后续调用将被忽略(第一次获胜)或后续调用将始终替换cookie或类似的东西?

示例:

HttpServletResponse response = ...;
response.addCookie(new Cookie("foo", "bar"));
response.addCookie(new Cookie("foo", "42"));

哪个值将传输到浏览器并由浏览器存储?

2 个答案:

答案 0 :(得分:6)

更新的答案 - 正如@skaffman和@Stephen C的评论所示,这不是理想的做法。

http://www.ietf.org/rfc/rfc2109.txt州的RFC规范

  

NAME = VALUE属性值对   必须在每个cookie中排在第一位。 如果出现属性   不止一次在饼干里,   行为未定义。

在Tomcat服务器上,行为是发送到浏览器的实际标头:

  

Set-Cookie:foo = bar
  Set-Cookie:foo = 42

这里foo被覆盖了。稍后阅读cookie会给你42。

答案 1 :(得分:2)

附加注释 - 请注意,在同一响应中使用相同名称的Cookie设置不同的子域会更改行为。我刚刚在我的mac上测试了在最新版本的java 1.6 / firefox / safari / chrome上保存了具有相同名称但不同子域的cookie,并且它按预期运行,节省了两个cookie。我理解规范不保证这种行为,但只是说'了解它可能会有所帮助。