cookie的操作

我在项目中测试
Cookie cookie = new Cookie("jobqun_beta", "abc");
cookie.setMaxAge(60*60*2);
cookie.setPath("/");
//cookie.setDomain(WebConstant.DOMAIN);
response.addCookie(cookie);

Cookie[] cookies = request.getCookies();

    if (cookies != null) {
        String r = null;
        for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals(WebConstant.COOKIE_DAMAIN_NAME)) {
                r = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
                System.out.println(r+"------------"+cookies[i].getMaxAge());
                break;
            }
        }
    }

然后输出的cookie的时间是 -1
我明明设置的是60*60*2啊,怎么变成-1了
求高手求解

[color=blue][b]
PS:由于由客户端传来的cookie中,不含有MaxAge 、ExpireDate 、 Domain、Path等信息。

所以MaxAge 、ExpireDate 、 Domain、Path等信息,被Tomcat处理封装成Cookie对象时,getMaxAge返回-1,getPath返回null等。

图文的解释方式,见我的博客:[/b][/color]
[url]
http://xiaolongfeixiang.iteye.com/blog/656454[/url]

希望对你有所帮助,也谢谢你的问题,我才写了那篇博客!!

[/quote]

WebConstant.COOKIE_DAMAIN_NAME 是不是 "jobqun_beta" ??

首先请确认cookie是否已经加到客户端了。方法:firefox的工具选项,隐私标签,显示cookie,看下站点下是否已经有你要添加的cookie名?

cookie.setSecure(false);

再加上这个试下

请你在浏览器里重确认该cookie的过期时间是多少。
如果时间正确,那就是取cookie的程序里面改变了该cookie

看图片上的过期时间是 2010年4月29日 18:46:59,那就是你程序取的时候的问题了。

for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals(WebConstant.COOKIE_DAMAIN_NAME)) {

System.out.println(r+"------------"+cookies[i].getMaxAge());
break;
}
}

这样试一下,不要这句
r = URLDecoder.decode(cookies[i].getValue(), "UTF-8");

另外你的另一个应用是什么意思?域名一样吗?

我试了,Firefox IE下都是 -1

不过,按照API中说的 -1 表示cookie存在时间是当前的浏览器窗口。

不过,关闭窗口之后,cookie的值还是能找的到(我试过了,你也可以试下。不过你的FireFox截图显示 时间设计正确)。

换句话说,getMaxAge的返回结果,可能是不可信的。

你也可以试试。

是这样的,看以下的解释:

1、看客户端传来的cookie信息:

[quote]Host 127.0.0.1:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
Cookie rtime=0; ltime=1272456157794; cnzz_eid=95028555-1272455695-; [b][color=blue]ceshi=abc[/color][/b][/quote]

传递的只是键值对,没有其他的状态信息,没有ExpireDate 、 Domain、Path等信息。

2、ExpireDate 、 Domain、Path等信息,由浏览器来维护。

3、发送Cookie时,浏览器先检查Domain Path是否符合;

如果符合然后再检查,其中键值对是否过期,过期的删除;

将不过期的键值对,嵌入HTTP头信息中发送给Server

所以,有客户端传来的cookie中,不含有MaxAge 、ExpireDate 、 Domain、Path等信息。

去掉:r = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
或者:在存入时,也对其进行编码;
URLEncoder.encoding("abc","utf-8");
试一下看看: :arrow:

呵呵,不是已经解释过了吗?

从客户端中传来的cookie中仅仅包含key-value信息,不包含时间等其他状态信息。所以通过调用getMaxAge()只会返回-1的。

参见:
[url]http://xiaolongfeixiang.iteye.com/blog/656454[/url]

你得到MaxAge想做什么操作?是做判断吗?

删除cookie的时候这样写试试,我在项目里是这样写的:
[code="java"]
Cookie cookie = new Cookie("jobqun_beta", null);
cookie.setMaxAge(60);
cookie.setPath("/");
//cookie.setDomain(WebConstant.DOMAIN);
response.addCookie(cookie);
[/code]

另外不知道和你的domain有没有关系,你把domain设置成.abc.com 试过吗?