Cookie:
点心,可以使用会话跟踪.
客户端技术:
把需要共享的信息,保存在客户端(浏览器中).
Cookie的操作:
1:创建Cookie和设置共享数据:
Cookie c = new Cookie(String name,String value).
2:把Cookie放入响应中,把Cookie的共享数据传递给浏览器,由浏览器保存.
response对象.addCookie(C).
3.获取Cookie和Cookie中的数据.(从请求中获取)
Cookie[] cs = req.getCookies();
if(cs != null){
//获取指定名称的Cookie
for(Cookie cookie : cs){
String name = cookie.getName();
if("currentName".equals(name)){
username = cookie.getValue();
break;
}
}
}
4.Cookie的name和value不支持中文.
解决方案:对中文做编码和解码.
String msg = "济天下";
//加密
msg = URLEncoder.encode(msg,"UTF-8");
System.outprintln(msg);
//解密
msg = URLDecoder.decode(msg,"UTF-8");
System.out.println(msg);
5.修改Cookie指定名的value值.
方式1:根据name获取被修改的Cookie对象,再调用setValue方法既可.
方式2:重新创建一个同名的Cookie.
注意:修改之后,要调用response对象.addCookie(c);
6.Cookie的生命周期:(Cookie中的共享数据可以保存多久)
缺省的情况:关闭浏览器就丢失了.
通过Cookie对象的setMaxAge(int seconds):设置Cookie可以存活多久.
seconds>0:可以存活多少秒.
seconds<0:存放在浏览器进程中,关闭浏览器Cookie就丢失了.
seconds=0:删除Cookie.
7:删除Cookie:
Cookie对象.setMaxAge(0);
8):Cookie的路径和域范围:
Cookie的路径:
Cookie对象.setPath(String path):
若不设置,那么使用的存放CookieServlet资源名的相对路径:
LoginServlet("/cookie/login"):存放一个Cookie.
ListServlet("/list");
由LoginServlet跳转到ListServlet,就不会再请求中携带Cookie.
相当于此时:cookie.setPath("/cookie");
设置在整个应用中在请求的时候都会携带Cookie.
cookie.setPath("/");
不同应用/主机之间如何共享Cookie:
此时就得需要设置域.
很多网站都有二级域名(配置虚拟记住).
一级域名:www.baidu.com
二级域名:music.baidu.com,map.baidu.com,tieba.baidu.com
cookie.setPath("/");
cookie.setDomain(".baidu.com");
9):Cookie的缺陷.
1>:中文处理麻烦.
2>:多人共用同一台电脑,信息不安全.
3>:一个Cookie只能存储一个简单类型的数据.
若要同时存储,账号,密码,邮件等等.
主要的原因是:Cookie的value只能存储String,不能存Object.
4>:Cookie的大小和数量限制:
Cookie大小限制在4KB之内;
一台服务器在一个客户端最多保存20个Cookie;
一个浏览器最多可以保存300个Cookie;
5>:Cookie的原理:把共享数据存储在浏览器中.
每次请求,再把共享数据带到服务端.最好是把数据存放于服务端.
------>Session:
网友评论