如何在cookie中添加数据

时间:2010-01-20 12:06:13

标签: java servlets cookies

我想在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());
    }
}

这只返回一个数据。

4 个答案:

答案 0 :(得分:2)

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

为了这个目的,调试/读取客户端的请求/响应头。在FireFox中,您可以使用Firebug(打开Firebug窗格,转到选项卡 Net ,单击相关请求,您将看到请求/响应标头,Cookie也在那里。)

答案 1 :(得分:0)

我会实现类似的东西:

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长度是否符合预期。

答案 2 :(得分:0)

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

response.addCookie(新Cookie(“名称”,“晴天”)); response.addCookie(新Cookie(“pwd”,“sunnymehta”));

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

答案 3 :(得分:0)

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

我认为你的java调用应该编写一个有效格式化的cookie文件,并为你生成一个有效的cookie对象数组。但是根据cookie的基础数据格式,你得到一个对象的事实对我来说似乎是可疑的。

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