一.状态管理
1.为什么需要状态管理?
web应用程序使用HTTP协议通信,而HTTP协议是"无状态"协议.即服务器一旦完成客户的请求之后,就断开连接.而同一个客户的下一次连接须重新建立网络连接
服务器应用程序有时是需要判断是否是同一个客户发出的请求,因此有必要追踪同一个用户发出的一系列请求.
2.什么是状态管理?
将客户端和服务器端之间的多次交互当做一个整体看待,并将多次交互所涉及的数据也即是状态保存下来.
3.状态管理常见的两种模式
1>客户端状态管理技术:将状态保存在客户端.代表性的是Cookie技术
2>服务器状态管理技术:将状态保存在服务器.代表性的是Session技术.
二.Cookie
1.什么是cookie呢?
浏览器向web服务器发送请求,服务器会将少量的数据以set-Cookie消息头的方式 发送给浏览器.浏览器会将这些数据保存起来.
当浏览器再次访问服务器,会将这些数据以Cookie消息头的方式发送给服务器.
2.cookie原理
3.cookie的使用方法
1>如何创建cookie
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
2>如何查询cookie
获取cookie对象:Cookie[] c = request.getCookies();
获取cookie对象的名称和值:String name = c.getName(); String value = c.getValue();
3>如何修改cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if (c.getName().equals("city") ) {
c.setValue("上海");
response.addCookie(c);
}
}
}
4>cookie的生存时间
--默认情况下,浏览器会将cookie保存在内存当中,只要浏览器不关闭,Cookie就一直存在.如果希望关闭浏览器之后cookie 仍然存在,可以设置过期时间: void Cookie.setMaxAge(int seconds); seconds单位为秒,精度不是很高.
>>seconds>0:浏览器要保存的cookie的最长时间为设置的参数值,如果超过指定的时间,浏览器会删除这个cookie.此时 cookie是保存在硬盘中的.
>>seconds=0:删除cookie.在修改cookie的生存时间为0之后,随着response发送回客户端,替换原有cookie,因生命周期到了 即将该cookie删除.
>>seconds<0:缺省值.浏览器会将cookie存到内存中.
5>cookie编码
cookie只能保存合法的Ascii码.如果要保存中文,需将中文转换为合法的ASCII字符,即编码.
Cookie c = new Cookie("city",URLEncoder.encode("北京","utf-8"));
6>cookie解码
Cookie[] cookies = request.getCookies();
if(cookies != null) {
Cookie c = cookies[0];
String value = c.getValue();
value = URLDecoder.decode(value,"utf-8");
}
7>cookie的路径问
浏览器在访问服务器上的某个地址时,会比较Cookie的路径与该路径是否匹配,只有匹配的cookie才会发送给服务器.
cookie的默认路径等于添加这个Cookie的web组件的路径.
8>发送cookie的条件
要访问的路径必须是cookie的路径或其子路径时,浏览器才会发送cookie.
9>如何设置cookie路径
Cookie c = new Cookie("uname","jack");
c.setPath("/appName");
response.addCookie(c);
10>cookie限制
cookie可以被用户禁止
cookie会将状态保存在浏览器端,不安全.对于敏感数据需加密后再保存到cookie中.
cookie只能保存少量数据.大约4kb左右.
cookie的个数是有限的.cookie只能保存字符串.