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); } |