我在项目中测试
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 试过吗?