Cookie
>其实是一份小数据,是服务器给客户端,并且存储在客户端上的一份小数据
应用场景
>自动登陆、浏览记录、购物车
为什么要有这个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())