1 状态管理
a) 什么是状态管理?
将浏览器与web服务器之间多次交互当做一个整体处理,并且将多次交互涉及的数据(即状态)保存下来.
b) 如何进行状态管理?
- 可以将状态保存在客户端
将状态保存到浏览器这边,通常使用Cookie技术
- 将状态保存到服务器端(session 会话)
c) Cookie
- 什么是coolie?
服务器为了识别用户身份临时存在浏览器端的少量数据.
- 工作原理
浏览器访问服务器时,服务器将一些数据已set-cookie消息头的形式发送给浏览器.浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器
- 添加cookie
cookie c = new cookie(string name,string value);
注:name:cookie名称 value:cookie值
response.addCookie(c);
d) 读取Cookie
Cookie[] request.getCookies();
注:有可能返回null;
String cookie.getName();
String cookie.getValue();
e) 编码问题
Cookie只能存放合法的ascii字符.
如果要存放中文,可以将中文转换成合法的ascii字符形式.
String URLEncoder.encode(String str,String charset)
String URLdecode,decode(String str,String charset)
注:建议添加cookie时,都统一编码(使用以上对保存的数据进行处理)
f) 生存时间问题
cookie.setMaxAge(int seconds);//设置生存时间
- 单位是秒
- Sencods>0 浏览器通常会将cookie保存在硬盘上,超过指定的时间,cookie失效.
sencods<0 默认值(浏览器会将cookie保存在内存中)
sencods=0 删除cookie.将cookie的时间设置为0就删除了.
g) Cookie的路径问题
- 什么是cookie的路径问题?
浏览器访问服务器上某地址,会比较请求地址是否符合cookie的路径要求,只有符合的cookie才会被发送。
- Cookie的默认路径?
等于添加cookie的web组件的路径:比如:/servlet-day06/biz01/addCookie.jsp添加了一个cookie则cookie的默认路径是/servlet-day06/biz0.
- 匹配规则:
要访问的地址必须是cookie的路径或者其子路径.
- 设置cookie路径
cookie.setPath(String path);
h) Cookie的限制
- Cookie不安全.(敏感数据要加密处理)
- Cookie可以被用户禁止.
- Cookie只能保存少量数据(大约4k).
- 浏览器端保存的cookie的数量也有限制.(几百个)
- Cookie只能保存字符串.
2 Session(会话)
a) 什么是session?
服务器端为了保存状态而创建的一个特殊的对象.
b) 工作原理
浏览器访问服务器时,服务器创建一个特殊的对象session(该对象有唯一一个id,称之为sessionid)服务器会将sessionid以cookie的形式发送给浏览器;当浏览器在访问时,会将sessionid发送过来,服务器端可以利用这个session找到对应的session对象.
c) 如何获得session对象?
- 方式一
httpSession session = request.getSession(boolean flag);
当flag为true时,先查看请求当中有没有sessionid,如果没有则创建一个session对象,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到会创建一个新的session对象.
当flag为false时,先查看请求当中有没有sessionid,如果没有则返回null,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到返回null.
- 方式二
httpSession session = request.getSession();
等价于request.getSession(true);
d) 几个方法
- String session.getId();
- setAttrbute(String name,object obj);
- Object getAttrbute(string name);
- removeAttrbute(string name);//解除绑定
e) session超时
- 什么是session超时?
服务器会将空闲时间过长的session对象删除掉.
注:为了节省内存空间的占用.服务器默认的超时限制一般是30分钟.
- 怎么修改?
配置文件(web.xml)中修改session config的时间数值.
- SetMaxInactiveInterval(int second);//两次请求之前的最大间隔时间.如果超过了时间限制则服务器会销毁session对象.
f) 删除session
invalidate();