我需要在一个响应中创建多个持久 cookie。
这样做
response.addCookie(new Cookie("1","1"));
response.addCookie(new Cookie("2","2"));
将创建一个带有 2 个“Set-Cookie” header 的响应。但他们不会坚持下去。 我需要“过期”日期。
expires=Wed, 07-Nov-2012 14:52:08 GMT
看看javax.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) 会覆盖第一次。
那么,问题是是否有办法向响应添加几个相同的命名 header ? 或者是否还有其他正确的方法可以做到这一点?
我看到过使用逗号分隔 cookie 的建议,但我的经验是浏览器只会读取第一个 cookie。
最佳答案
您需要addHeader()
而不是setHeader()
。前者添加 header ,而后者设置(从而覆盖任何旧 header ) header 。
response.addHeader("Set-Cookie", cookieString1);
response.addHeader("Set-Cookie", cookieString2);
然而,正确的方法是使用 setMaxAge()
Cookie
类的方法(以秒为单位的过期时间)并使用 addCookie()
通常的方式。
public static final int TWO_WEEKS_IN_SECONDS = (int) TimeUnit.DAYS.toSeconds(14);
// ...
Cookie cookie1 = new Cookie("1","1");
cookie1.setMaxAge(TWO_WEEKS_IN_SECONDS);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("2","2");
cookie2.setMaxAge(TWO_WEEKS_IN_SECONDS);
response.addCookie(cookie2);
关于java - 在同一个响应中设置多个 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052565/