我想在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());
}
}
这只返回一个数据。
答案 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支持,所以我猜它有点过时了。