8

我需要在一个响应中创建多个持久性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

看到j​​avax.servlet.http.Cookie怎么不支持“过期”,我之前用过

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。

4

1 回答 1

19

你需要addHeader()而不是setHeader(). 前者添加一个标题,而后者设置(并因此覆盖任何旧的)一个标题。

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

然而,正确的方法是使用类setMaxAge()的方法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);
于 2012-10-24T15:40:04.627 回答