Java 在同一响应中设置多个cookie

Java 在同一响应中设置多个cookie,java,servlets,cookies,Java,Servlets,Cookies,我需要在一个响应中创建几个持久的cookies 像这样做 response.addCookie(new Cookie("1","1")); response.addCookie(new Cookie("2","2")); 将创建一个带有2个“Set Cookie”标题的响应。但他们不会坚持下去。 我需要那个“过期”的日期 expires=Wed, 07-Nov-2012 14:52:08 GMT 看到javax.servlet.http.Cookie如何不支持“expires”,我以前使用过

我需要在一个响应中创建几个持久的cookies

像这样做

response.addCookie(new Cookie("1","1"));
response.addCookie(new Cookie("2","2"));
将创建一个带有2个“Set Cookie”标题的响应。但他们不会坚持下去。 我需要那个“过期”的日期

expires=Wed, 07-Nov-2012 14:52:08 GMT
看到javax.servlet.http.Cookie如何不支持“expires”,我以前使用过

String cookieString="cookieName=content;Path=/;expires=Wed, 07-Nov-2012 14:52:08 GMT;"
response.setHeader("Set-Cookie", cookieString);
这就像一个符咒,但是第二次使用response.setHeader(“Set Cookie”,newCookie)会覆盖第一次

因此,问题是是否有任何方法可以向响应添加几个相同的命名头? 或者有没有其他正确的方法

我看到过使用逗号分隔cookie的建议,但我的经验是,浏览器只能读取第一个cookie。

您需要的不是。前者添加一个头,而后者设置(从而覆盖任何旧的)头

response.addHeader("Set-Cookie", cookieString1);
response.addHeader("Set-Cookie", cookieString2);
但是,正确的方法是使用
Cookie
类的方法(以秒为单位计算过期时间),并使用
addCookie()
常规方法

Cookie cookie1 = new Cookie("1","1");
cookie1.setMaxAge(1209600);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("2","2");
cookie2.setMaxAge(1209600);
response.addCookie(cookie2);

阿杜,显然忽略了这个方法,谢谢你指出!cookie.setMaxAge将在响应头中使用maxAge和not expires,这与IE不兼容。基本上,我发现cookie类没有用。不客气。只有出于某种原因在cookie中使用特殊字符时,后一种说法才是正确的。默认情况下,它肯定会设置expires属性。为了支持前面的评论,请仔细阅读以更好地理解IE相关的问题。总结:不要在cookie名称/值中使用URL特殊字符,否则您必须以某种方式对它们进行转义/编码。如果您通过自己显式设置头来设置相同的值来破解它,它仍然会被严重破坏。它正在进行urlencoded,但在我测试Cookie.setMaxAge()时可能没有。我想我会坚持设置标题,因为我知道它是有效的,我喜欢有明确的控制,但感谢链接。