Cookie的创建发送获取、存活时间、存中文、重名和路径问题
Cookie的创建发送获取、存活时间、存中文、重名和路径问题
1.类:javax.servlet.http.Cookie
2.Cookie 的创建和发送
//创建Cookie对象 Cookie cookie = new Cookie("name","admit"); //发送Cookie对象 response.addCookie(cookie);
3.Cookie的获取
//返回的是Cookie数组 Cookie[] cookies = request.getCookies(); //判断Cookie是否为空 if(cookies != null && cookies.length>0 ){ for (Cookie cookie:cookies) { //获取Cookie的名称和值 String name = cookie.getName(); String value= cookie.getValue(); System.out.println("name:"+name); System.out.println("value:"+value); } }
4.Cookie 设置到期时间
取值:
- 负整数:表示不存储该cookie,cookie的maxAge属性的默认值是-1,表示只在浏览器内存中存活,一旦关闭浏览器那么cookie就会消失。
- 正整数:表示存储的秒数,浏览器会把Cookie保存在硬盘上,就算关闭浏览器或者重启客户端电脑,cookie也会存活相应的时间。
- 0:表示删除了该cookie,无论是浏览器内存还是客户端硬盘,都会删除这个cookie,如果原本存在的值,通过cookie.setMaxAge(0)可以将它删除
格式:
如:cookie.setMaxAge(-1);
问题:之前的值在浏览器中还是会显示出来
可能是因为默认值是-1,表示在浏览器存活,所以每次启动的时候,这个值就还是会出现。也能被获取出来进行打印。
5.Cookie存中文问题:
Cookie中不可以出现中文,需要用 URLEncoder.encode() 来进行编码,不然会报错,然后使用的时候通过URLDecoder.decode()来解码。
注意:不太建议存中文
例子:
String name = "姓名:"; String value = "张三"; //通过URLEncode编码 name = URLEncoder.encode(name); value = URLEncoder.encode(value); Cookie cookie = new Cookie(name,value); response.addCookie(cookie); //通过URLDecoder解码 Cookie[] cookies = request.getCookies(); //遍历 if(cookies!=null&&cookies.length>0){ for (Cookie cook:cookies) { System.out.println(URLDecoder.decode(name)); System.out.println(URLDecoder.decode(value)); } }
6.Cookie同名问题:
后面的cookie会将前面的cookie覆盖掉,只要是同name的就会覆盖掉
注意:cookie的存储是有上限的
7.Cookie路径问题:
1)当前服务器下任何项目的任意资源都可以获取Cookie对象
cookie.setPath("/");
2)当前项目资源课获取Cookie对象(默认的)
指不指定都可以,指定的话需要指定当前站点名
cookie.setPath("/sr01");
3)指定项目下的资源可以获取Cookie对象
通过指定站点名
cookie.setPath("/sr02");
4)指定目录下的资源可以获取Cookie对象
例如:
cookie.setPath("/sr02/ser02");
指的是只有sr02该站点名下的ser02可以获取cookie对象,别的都拿不到