Cookie
1.什么是Cookie?
Cookie是客户端技术,程序将每个用户的数据以Cookie的形式写给用户的各自浏览器,当用户使用浏览器去访问服务器中的web时,以后每次请求都会将之前保存的共享数据发送给服务器。
2.作用:
实现会话跟踪
*实现原理
1.客户端发送请求给服务器
2.服务器发送响应头set-cookie并携带数据给客户端
3.客户端接收到响应头,并保存数据
4.客户端会使用set-cookie数据带给服务器
5.服务器获取消息头的数据

Cookie的操作
1.创建Cookie对象
Cokkie cokkie=new Cokkie(String name,String value)
*name: 当前Cookie取的唯一名字.
*value: 存储在Cookie的共享数据,只能是字符串类型.
Cookie cookie = new Cookie("currentName", "ZYGui");
1.把Cookie放入响应中,响应给浏览器,把共享的数据存储到浏览器中
respond.addCookie(cookie)
2.获取Cookie及里面的数据
Cookie [] cs=request.getCookie();

3.修改Cookie中指定的属性名的属性值
1.重新创建一个新的同名Cookie,覆盖之前的Cookie
Cookie cookie=new Cookie(String name,String name)
2.先获取之前的Cookie对象,然后调用setValue(String newValue)方法
//注意:重新设定了Cookie值后需要重新将cookie再次发送给浏览器
respond.addCookie(cookie)
4.操作Cookie的生命周期,默认是在关闭浏览器的时候销毁
1.会话Cookie: 关闭浏览器之后,Cookie就销毁了. 缺省情况
2.持久化Cookie: Cookie可以保存指定的时间段.
3.设置Cookie的最大存活时间: cookie.setMaxAge(int seconds)
seconds = 0: 删除Cookie;
seconds < 0: 会话Cookie
seconds > 0: 存储指定的秒数.
5.删除Cookie
cookie.setMaxAge(0);
6.Cookie 中的key和value不支持中文
1.先对中文字符进行编码
Cookie ck=new Cookie("username",URLEncoder.encoder(username,"UTF-8"));
2.获取之后在进行解码
username=URLDecode.decode(value,"utf-8");
Cookie共享问题
1.Cookie的路径
Cookie在创建时,会根据当前的Servlet相对路径来设定自己的路径
比如Servlet类的路径/cookie/servlet ,相对路径未/cookie/
问题:此时只会访问/cookie/下的资源才能发送给服务器
解决方法:是指cookie路径:cookie对象.setPath(String url)
表示当前应用中的所有资源都能够共享Cookie下的信息
为什么要设置路径,当访问某些页面时,不希望携带cookie.此时就可以设置cookie的携带路径.
路径写法: /项目名称, 所有项目中添加cookie,访问时都会携带.
设置 /项目名称/p, 此时只访问/p时,才携带cookie,其他路径不携带.
2.域范围
在多个应用之间实现数据共享,那么需要设置域范围,比如:
news.baidu.com
map.baidu.com
*ck.setDomian("baidu.com")
Cookie的缺陷
1.获取Cookie麻烦
2.Cookie不支持中文(Tomcat8.0后支持中文)
3.Cookie存储有限
一个浏览器对一个站点最多储存20kbCookie信息
一个浏览器最多储存300Cookie信息
4.共享数据容易泄露,不安全
5.一个Cookie只能存储一个字符串类型
最好的解决方案: 将数据保存在服务端(Session)
Cookie的用处
1.存储少量且不敏感的数据
2.在不登录的情况下,完成对身份的识别