>其实是一份小数据,是服务器给客户端,并且存储在客户端上的一份小数据
应用场景
>自动登陆、浏览记录、购物车
为什么要有这个Cookie
>http的请求是无状态的。客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。为了更好的用户体验,更好的互交[自动登陆],其实从公司层面讲,就是为了更好的搜集用户习惯[大数据]
Cookie怎么用?
简单使用:
//1. 在响应的时候,添加cookie Cookie cookie = new Cookie("name", "zhangsan"); //给响应,添加一个cookie response.addCookie(cookie); Cookie cookie1 = new Cookie("age","18"); response.addCookie(cookie1);在客户端收到的信息里面,响应头中多了一个字段Set-Cookie
Set-Cookie : name=zhangsan Set-Cookie : age=18
// 获取客户端带过来的Cookie Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie2 : cookies) { String name = cookie2.getName(); String value = cookie2.getValue(); System.out.println(name + "=" + value); } }客户端提交数据的时候,cookie也是在请求头里面
Cookie : name=zhangsan;age=18
常用方法:
/*这个cookie的有效期,默认情况下 关闭浏览器后,cookie就没有了----->针对没有设置cookie的有效期 expiry:有效以秒计算 正值:表示在这个数字过后,cookie将会失效 负值:关闭浏览器后,那么cookie就是小,默认值是-1*/ cookie.setMaxAge(60*60*24*7); //赋值新的值 cookie.setValue(newValue); //用于指定只有请求了指定的域名,才会带上该cookie //例如:music.baidu.com sport.baidu.com ... cookie.setDomain(".baidu.com"); //只有访问上面这个域名下的这个aa路径地址才会带上cookie,这个路径其实就是一个项目 //例如:https://www.baidu.com/aa //https://localhost:8080/aa cookie.setPath("/aa");移除Cookie:
官方没有提供delete方法,也没有什么remove方法
方法一:得到以前的Cookie,然后重新设置有效期
Cookie [] cookies = request.getCookies(); Cookie cookie = CookieUtil.findCookie(cookies , "aa"); cookie.setMaxAge(0); reponse.addCookie(cookie);方法二:创建一个新的Cookie,
Cookie cookie = new Cookie("name","xx");//注意,此处的key一定要以要移除Cookie的key相同 cookie.setMaxAge(0); reponse.addCookie(cookie);Cookie分类:
>会话Cookie:默认情况下,关闭了浏览器,Cookie就会消失
>持久Cookie:在一定时间下,都有效,并且会保存在客户端上
cookie.setMaxAge(0); //设置立即删除
cookie.setMaxAge(100); //100 秒
>Cookie的安全问题:
由于Cookie会保存在客户端上,所以有安全隐患问题。Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。
为了解决这个问题---------->Session
>Cookie创建:
response.addCookie(new Cookie())