NO.68 状态管理-cookie
(1)什么是状态管理?
将浏览器与web服务器之间多次交互当做一个整体来处理,并且
将多次交互所涉及的数据(即状态)保存下来。
(2)如何进行状态管理
1)将状态保存在客户端(浏览器)
Cookie
2)将状态保存在服务器端
session
(3)Cookie
1)什么是Cookie?
服务器临时存放在浏览器端的少量数据
2)工作原理
当浏览器访问服务器时,服务器会将少量数据发送给浏览器(使用set-cookie消息头),浏览器会将这些数据临时保存下来;
当浏览器再次访问服务器时,会将之前保存的数据发送给服务器(使用cookie消息头)。
3)添加cookie
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
4)读取cookie
Cookie[] request.getCookies();
注:有可能返回null。
String cookie.getName();
String cookie.getValue();
5)编码问题
a. cookie只能保存合法的ascii字符,如果是中文,
需要将中文转换成合法的ascii字符串。
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
b.建议添加cookie时,都统一编码。
6)生存时间问题
a.默认情况下,浏览器会将cookie保存在内存里面。
只有浏览器不关闭,cookie就会一直保存,浏览器一关闭,cookie就会被删除。
b.cookie.setMaxAge(int seconds)
注:b1. seconds单位是秒。
b2. 当seconds > 0时,浏览器会将cookie保存在硬盘上(文件的形式存放),超过指定时间,浏览器会销毁该cookie。
当seconds < 0时,默认值(即保存在内存里面)。
当seconds = 0时,删除cookie。
比如,要删除一个名称为username的cookie:
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
7)cookie的路径问题
a.浏览器访问服务器时,会比较cookie的路径是否与要访问的路径匹配,只有匹配的cookie才会被发送。
b.cookie的默认路径
默认等于添加该cookie的web组件的路径。
比如 /servlet-day06/biz01/addCookie.jsp添加了一个cookie,则该cookie的默认路径就是
/servlet-day06/biz01
c.匹配规则
要访问的路径必须等于cookie的路径或者是其子路径,
符合该要求的cookie才会被发送出去。
比如,cookie的路径是 /servlet-day06/biz01,
则:/servlet-day06/findCookie1.jsp 不会
/servlet-day06/biz01/findCookie2.jsp 会
/servlet-day06/biz01/sub/findCookie3.jsp 会
d.cookie.setPath(String path)
注:该方法用于设置cookie的路径
8)cookie的限制
a.可以被用户禁止。
b.只能保存少量的数据(大约4k左右)。
c.保存的数量也有限制(大约几百个)。
d.只能保存字符串,对于中文,需要编码。
e.不安全。