cookie
cookie是浏览器提供的一种基础,通过服务器的程序将一些只需保存在客户端,或者在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但是由于Cookie是服务器保存在客户端的信息,所以安全性较差。
Cookie是随着服务器的响应发送给客户端,保存在浏览器。当下次再次访问服务器时把Cookie再带回服务器。
cookie创建和发送
通过new 来创建一个cookie对象,采用key,value的方式来存入数据
要想发送到客户端,需要添加进response对象中,带回客户端
//创建Cookie对象
Cookie cookie = new Cookie("uname","zhangsan");
//响应回客户端
response.addCookie(cookie);
cookie的获取
再服务器中只提供了一个getCookies()方法用来获取客户端回传的所有cookie组成的一个数组,如果需要获取单个cookie则需要通过遍历,getName()获取Cookie的名称,getValue()获取Cookie的值
//获取客户端上的Cookie数组
Cookie[] cookies = request.getCookies();
//判断数组是否为空
if(cookies != null && cookies.length > 0){
//遍历cookie数组
for(Cookie cookie : cookies){
//获取cookie的名称和值
System.out.println(cookie.getName);
System.out.println(cookie.getValue);
}
}
Cookie设置到期(存活)时间
到期时间用来指定cookie何时失效,默认为当前浏览器关闭即失效。
我们可以手动设置cookie的有效时间(通过到期时间计算),通过setMaxAge(int time);方法设定cookie的最大有效时间,以秒为单位。
到期时间的取值
- 负整数
若为负数,表示不储存该cookie
cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么cookie就会消失 - 正整数
若大于0的整数,表示储存的秒数。
表示cookie对象可存活指定的秒数。当大于 0 时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,重启电脑,cookie依然会存活相应的时间。 - 零
若为0,表示删除该cookie
cookie生命等于0是一个特殊值,它表示cookie作废!也就是说,如果原来浏览器已经保存了这个cookie,那么可以通过Cookie的setMaxAge(0)来删除该cookie。无论是在浏览器内存中还是在客户端硬盘上都会删除这个cookie。
Cookie注意事项
- Cookie保存在当前浏览器中,不能跨浏览器使用,不能跨电脑使用,仅仅只是保存在本机上。
- Cookie存入中文问题:Cookie中不能存入中文(也不建议存中文),如果有中文则通过URLEncode.encode()来进行编码,获取时通过URLDecoder.decode()来进行编码。
String name = "姓名";
String value = "王五";
//通过URLEncoder.encode()来进行编码
name = URLEncoder.encode(name);
value = URLEncoder.encode(value);
//创建Cookie对象
Cookie cookie = new Cookie(name,value);
//发送cookie对象
response.addCookie(cookie);
//获取时通过 URLDecoder.decode();来进行编码
String name = URLDecoder.decode(cookie.getName);
String value = URLDecoder.decode(cookie.getValue);
- 同名cookie问题:如果服务器发送重复的Cookie那么会覆盖原有的Cookie
- 浏览器存放Cookie的数量:不同的浏览器对Cookie也有限定,Cookie的储存是有上限的,存储大小也是有限的,在4KB左右。Cookie是存储在客户端浏览器的,而且一般是由服务器端创建和设定。后期结合Session来实现会话跟踪。
- 只有访问路径中包含cookie对象的path值,才可以获取到该cookie对象,默认是当前项目可访问到该cookie,如有其他需求,可以cookie.setPath(" ");参数为指定需要该Cookie的路径。