日期:2014-05-17  浏览次数:20694 次

JSP中setMaxAge无效?
为什么setMaxAge不管怎么设置都是 -1 ? 完全无法理解了 代码如下

public class cookieTest extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
//设置一个cookie
Cookie cookie = new Cookie("username","123456");
//有效时间为十分钟
cookie.setMaxAge(60 * 10);
//添加cookie
resp.addCookie(cookie);
//得到所有cookie
Cookie[] cookies = req.getCookies();
if(cookies == null){
out.println("cookie为空");
}else{
for(int i=0;i<cookies.length;i++){
out.println("cookie名: " + cookies[i].getName() + " ");
out.println("cookie值: " + cookies[i].getValue() + "<br/>");
out.println("cookie有效时间: " + cookies[i].getMaxAge() + "<br/>");
}
}
}
}
   

  结尾返回: cookie名: username cookie值: 123456 cookie有效时间: -1 (郁闷了)


  要怎么样才能设置cookie的有效时间呢? 谢谢了

------解决方案--------------------
req.getCookies()
重服务器端向客户端发送时会把cookie的一些信息发送到客户端
但从客户端接收cookie时,不会接收到cookie的额外的信息的,比如maxAge
所以是-1
这个貌似在哪里看到过 记得不是很清楚了
------解决方案--------------------
楼主不用纠结了这个了。你的取法也是正确的。
刚查了下:
客户端第一次登陆后,服务器端传输cookie并写到客户端。
第二次登陆,request请求传给服务端,但在这个request中是不包含maxage值的,所以服务端取到的值还是默认值-1。也就是说设置完maxage值后,maxage不会再被服务端读取和修改了。这一过程由浏览器完成,浏览器判断maxage的值,从而判断cookie是否过期。