【问题标题】:how to add data in cookie如何在cookie中添加数据
【发布时间】:2010-01-21 00:34:33
【问题描述】:

我想在 cookie 中添加两个值并检索它们。我正在这样做,但我只得到第一个值,而不是第二个。

Cookie c = new Cookie("a", a);
c.setMaxAge(60);
response.addCookie(c);

Cookie b = new Cookie("d", d);
b.setMaxAge(5 * 60);
response.addCookie(b);

阅读时:

Cookie cookies[] = getRequest().getCookies();
Cookie myCookie = null;
if (cookies != null) {      
    for (int i = 0; i < cookies.length; i++) {
        log.info("test ;;;"+cookies[i].getName());
    }
}

这只会返回一个数据。

【问题讨论】:

  • 返回哪些数据?从上面的代码来看,在这种情况下它应该返回 cookie 的名称。
  • 不,它只是重新调整我的“a”cookie数据而不是第二个
  • 作为故障排除提示,请尝试切换您首先分配的 cookie。这应该可以帮助您确定“d”cookie 是否消失,因为第二个 cookie 总是被丢弃,或者特别是“d”有什么问题。我怀疑前一种情况,原因在下面我的回答中详述。

标签: java servlets cookies


【解决方案1】:

您很可能从 错误 请求中读取它们。新添加的 cookie 将仅在 后续 请求中可用,它们不会立即反映在 当前 请求中。因此,例如,如果您将 cookie 添加到响应中,然后尝试从 current 请求(与您添加 cookie 的同一响应相关联的请求)中读取它,那么您将不会完全得到添加的cookie。这也适用于您将请求从一个转发到另一个资源(即 Servlet 或 JSP)。

为此也在客户端调试/读取请求/响应标头。在 FireFox 中,您可以为此使用 Firebug(打开 Firebug 窗格,转到选项卡 Net,单击有问题的请求,您将看到请求/响应标头,cookie 位于也有)。

【讨论】:

    【解决方案2】:

    我会实现类似的东西:

    for(int i= 0; i < cookies.length; i++) { 
       Cookie cookie = cookies[i];
       log.info("name: "  + cookie.getName()) 
       log.info("value: " + cookie.getValue()) 
    }
    

    这应该打印 cookie 的名称和值。如果这不起作用,则可能是 cookie 未正确添加到响应中。检查 cookie 的长度是否符合预期。

    【讨论】:

      【解决方案3】:

      亲爱的,你可以做一些这样的事情,我已经测试过它和它的工作原理

      response.addCookie(new Cookie("name","sunny")); response.addCookie(new Cookie("pwd","sunnymehta"));

      Cookie[] cookie=request.getCookies(); for(Cookie ck:cookie) { System.out.println(ck.getName()); }

      【讨论】:

      • 呃,你能告诉我为什么这也适用于 OP 的情况吗?不,不要说这是因为你使用了增强的 for 循环而不是标准的 for 循环。这没什么区别。
      【解决方案4】:

      我会看看保存在浏览器中的实际 cookie。首先想到的是,在存储 cookie 数据的底层文件中,实际上只有一个文件——代码中的 cookie 对象实际上被编码为单个文件中的名称-值对。 http://www.quirksmode.org/js/cookies.html 上的文章详细介绍了数据如何实际存储在 cookie 文件中。 (实际上不仅仅是名称-值对,因为它还包含其他 cookie 属性,如过期日期和安全标志,但无论如何本文都会向您展示这种格式。)

      我认为您的 java 调用应该编写一个格式有效的 cookie 文件,并为您生成一个有效的 cookie 对象数组。但是,鉴于 cookie 的基础数据格式,您取回一个对象的事实对我来说似乎很可疑。

      过去我使用Cookie Pal 来检查原始 cookie 数据,尽管该网站提到了 IE6 支持,所以我猜它有点过时了。

      【讨论】:

        猜你喜欢
        • 2014-01-22
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 2010-09-30
        • 2011-02-18
        • 2021-08-18
        相关资源
        最近更新 更多