1.什么是状态管理
- 将浏览器与服务器多次交互的过程看作一个整体,把这多次交互过程当中所涉及到的数据保存下来就是状态管理。
- 状态:数据
- 管理:保存
2.cookie
- 什么是cookie
浏览器在向服务器发送请求时,服务器会将少量的数据以set-cookie消息头的方法发送给浏览器,浏览器会将数据保存下来,当再次向服务器发送请求时,会将这些数据以cookie消息头的方式发送给服务器,通过这种方式,可以管理用户的状态。 - 通常有三个步骤来识别回头客:
- 服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
- 浏览器在本地机中存储这些信息,以备不时之需。
- 当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情
- 创建cookie(即让服务器发送set-cookie消息头给浏览器)
Cookie c = new Cookie("username","Harry Potter");
response.addCookie(c);
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue();
- 编码问题
- cookie的值只能是ascii字符,如果是中文,需要将中文转化成ascii字符形式。
String URLEncoder.encode(String str,String code);
String URLDecoder.decode(String str,String code);
- 生存时间问题
- 缺省情况下,浏览器会把cookie保存在内存里面,只要浏览器不关闭,cookie就会一直存在,浏览器关闭,cookie就会被销毁。
- cookie.setMaxAge(int seconds);单位是秒
- seconds > 0 浏览器会将cookie保存在硬盘上,如果超过了指定的时间,则cookie会被删除
- seconds < 0 缺省值(cookie保存在内存中)
- seconds = 0 删除cookie(注意,删除就是用这个)
- 路径问题
- 什么是cookie的路径问题
浏览器在向服务器上的某个地址发请求时,会比较该地址是否符合cookie的路径的要求,只有符合条件的cookie才会被发送出去 - cookie的默认的路径
等于添加该cookie的组件(servlet/jsp)的路径
例如,/web07/biz01/addCookie.jsp 添加了一个名称为”cart”的cookie,则该cookie有一个默认的路径(“/web07/biz01/”) - 匹配规则
请求地址必须等于cookie的路径,或者是其子路径。
cookie的路径是 /web07/biz01/
- /web07/biz01/findCookie2.jsp Yes
- /web07/biz01/sub/findCookie3.jsp Yes
- /web07/findCookie1.jsp No
- 修改默认路径
cookie.setPath(String path)
- cookie的限制
- cookie可以被用户禁止。
- cookie不安全(对于敏感数据,需要加密)。
- cookie只能保存少量的数据(大约是4k)。
- cookie的数量也有限制(大约是几百个)。
- cookie只能保存字符串