JavaWeb课程系列

2.2 设置cookie

2.2.1 cookie的有效时间

1)经过上边的介绍我们已经知道Cookie是存储在浏览器中的,但是可想而知一般情况下浏览器不可能永远保存一个Cookie,一来是占用硬盘空间,再来一个Cookie可能只在某一时刻有用没必要长久保存。

  • 所以我们还需要为Cookie设置一个有效时间。

3)通过Cookie对象的setMaxAge()可以设置Cookie的有效时间。

其中setMaxAge()接收一个int型的参数,来设置有效时间。参数主要有一下四种情况:

  • 设置为0,setMaxAge(0)

Cookie立即失效,下次浏览器发送请求将不会在携带该Cookie

  • 设置大于0,setMaxAge(60)

表示有效的秒数60就代表60秒即1分钟,也就是Cookie在1分钟后失效。

  • 设置小于0,setMaxAge(-1)

设置为负数表示当前会话有效。也就是关闭浏览器后Cookie失效

  • 不设置

如果不设置失效时间,则默认当前会话有效。

2.2.2 cookie的路径

1)Cookie的路径指告诉浏览器访问那些地址时该携带该Cookie,我们知道浏览器会保存很多不同网站的Cookie,比如百度的Cookie,新浪的Cookie,腾讯的Cookie等等。那我们不可能访问百度的时候携带新浪的Cookie,也不可能访问每个网站时都带上所有的Cookie这是不现实的,所以往往我们还需要为Cookie设置一个Path属性,来告诉浏览器何时携带该Cookie。

2)我们同过Cookie的setPath()来设置路径,这个路径是由浏览器来解析的所以/代表服务器的根目录。

如:

  • 设置为/项目名/路径 àsetPath(“/项目名/路径”) 

这样设置只有访问“/项目名/路径”下的的资源才会携带Cookie

如:/项目名/路径/1.jsp 、/项目名/路径/hello/2.jsp 等

  • 如果不设置,默认会在访问“/项目名”下的资源时携带

如:“/项目名/index.jsp” 、 “/项目名/hello/index.jsp”

Cookie cookie = new Cookie("username", "abc");

cookie.setMaxAge(60*60*24);//秒为单位,一天后过期

cookie.setPath(getServletContext().getContextPath()+"/");

resp.addCookie(cookie);

resp.sendRedirect(getServletContext().getContextPath()+"/index.jsp");

2.3 读取cookie

通过以上步骤,我们将cookie保存到了浏览器端。那么我们如何读取cookie中的值呢。

分析:

cookie被设置进入浏览器后,每次请求都会携带cookie的值,所以我们需要从request中取出cookie进行解析。

//从request中获取所有cookie

Cookie[] cookies = request.getCookies();

//遍历cookie

for(Cookie c:cookies){

String cName = c.getName();//获取cookie名

String cValue = c.getValue();//获取cookie值

System.out.println("cookie:" + cName + "=" +cValue);

}