Cookie
1. 状态管理
1.1 什么是状态管理
将浏览器与web服务器之间多次交互当做一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来。
1.2 如何进行状态管理
- 将状态保存在浏览器端(Cookie)
- 将状态保存在服务器端(Session)
2. 什么是Cookie
服务器临时存放在浏览器端的少量数据,用于跟踪用户的状态。
3. 工作原理
当浏览器访问服务器时,服务器会将少量数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。
4. 添加Cookie
//Cookie只能存放字符串
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
5. 读取Cookie
//读取Cookie
Cookie[] request.getCookies();
//获得Cookie的名字
String cookie.getName();
//获得Cookie的值
String cookie.getValue();
6. Cookie的生存时间
默认情况下,浏览器会将Cookie保存在内存里面。浏览器关闭,则cookie会被删除。
cookie.setMaxAge();
单位是秒
当seconds > 0 时,浏览器会将cookie保存在硬盘上,当超过指定时间,cookie会被删除
当seconds < 0 时,浏览器会将cookie保存在内存里面
当seconds = 0 时,浏览器会立即删除该cookie
-
删除cookie
Cookie c = new Cookie("username", ""); c.setMaxAge(0); response.addCookie(c);
7. Cookie的编码问题
-
什么是cookie的编码问题
cookie只能存放合法的ascii字符,中文需要转换成合法的ascii字符的形式才能存放
String URLEncoder.encode(String str, String charset); String URLDecoder.decode(String str, String charset);
-
建议:不管是否为中文,最好统一编码处理
//添加Cookie Cookie cookie = new Cookie("name", URLEncoder.encode("用户", "UTF-8")); response.addCookie(cookie); //读取Cookie String name = URLDecoder.decod(cookies[i].getValue, "UTF-8");
8. Cookie的路径问题
-
什么是cookie的路径问题
浏览器访问服务器时,会比较请求地址是否与cookie的路径匹配,只有匹配的cookie才会被发送
-
cookie的默认路径
cookie的默认路径为添加该cookie的web组件的路径
-
cookie的匹配规则
-
请求路径必须等于cookie的路径或者是其子路径,只有满足该条件的cookie才会被发送
-
可以修改cookie的路径
cookie.setPath(String path);
-
9. Cookie的限制
-
cookie可以被用户禁止
-
cookie不安全
对于敏感数据,尽量避免存放在cookie里面,如果一定要存放,要加密之后再存放
-
cookie只能存放少量的数据,大约是4k左右
-
cookie的个数有限制
-
cookie只能存放字符串