在同一响应中设置多个cookie

时间:2012-10-24 15:35:33

标签: java servlets cookies

我需要在一个响应中创建几个持久性 Cookie。

一样
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。

1 个答案:

答案 0 :(得分:9)

您需要addHeader()而不是setHeader()。前者添加标题,而后者设置(因此覆盖任何旧标题)标题。

response.addHeader("Set-Cookie", cookieString1);
response.addHeader("Set-Cookie", cookieString2);

然而,正确的方法是使用Cookie类的setMaxAge()方法(以秒为单位的过期时间)并以通常的方式使用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);