java - 在同一个响应中设置多个 cookie

标签 java servlets cookies

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

相关文章:

java - HTMLUnit 使用 JavaScript 代码执行表单

java - 设置背景颜色时应用程序崩溃

java - 无法调度到jsp页面

node.js - express-session 和 cookie-session 有什么区别?

javascript - 如果cookie存在,如何隐藏div

java - 将复选标记 "02713"UNIcode 符号转换为字符串

java - 如何让显示 JPanel 数组的 JFrame 进行 self 更新?

java - 在 Java Servlet 中读取从 Ajax 发送的 JQuery 数据

java - 如何使用 session ID 创建 session 对象?

jquery - 无法读取 cookie(使用 jQuery 和 cookies 插件)