cookie详解

什么是cookie

  cookie是浏览器访问web服务器的某个资源时,由web服务器在HTTP响应头中附带传送给浏览器的一小段数据

  一旦浏览器保存了某个cookie,那么它以后在每次访问该服务器时,都应在http请求头中将这个cookie回传给web服务器(有点像验证,现在把之前访问你时你给的东西给你,证明我访问过)

  一个cookid由name和value组成

  

创建cookie

  cookie已经被封装成cookie类了,所以我们只需简单地设置cookie的配置信息,即可创建cookie

//创建cookie
Cookie cookie = new Cookie("name","value");
cookie.setPath("/webs");//设置cookie的路径
cookie.setMaxAge(-1);//内存储存,取值有三种:>0为有效期,单位为秒;=0浏览器关闭;<0内存存储,默认为-1
response.addCookie(cookie);
//注意:有效路径:当前访问的资源的上一级目录,不带主机名

  一般来说cookie是多个的,所以我们创建好cookie需要往response里面添

  setPath设置的是能访问该cookie的资源的路径,也就是说这个路径下的资源才可以访问这个cookie

获取cookie

  cookie的获取就是从resquest获取当前的cookie数组,然后遍历,根据name,获取目标value的过程

//获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if(cookie.getName().equals("目标name")){
        String code = cookie.getValue();//获取value
        break;
    }
}

修改cookie

  修改cookie和创建差不多,本质上就是新建一个cookie覆盖掉原来的cookie

  只要保证cookie的名字和路径都要一致,就能覆盖

//修改cookie
Cookie cookie = new Cookie("name","vlaue");//name写需要修改的cookie的name
cookie.setPath("/webs");//有效路径也是原来的
cookie.setMaxAge(-1);
resp.addCookie(cookie);//添加进cookie,也就是覆盖

 cookie的编码和解码

  cookie默认不支持中文,所以只能包含ASCll字符,所以cookie需要对Unicode字符进行编码,否则会出现乱码

  •编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法

  •解码可以用java.net.URLDecoder类的decode(String str,String encoding)方法

创建带中文的cookie

//创建带中文的cookie
Cookie cookie = new Cookie(
        URLEncoder.encode("姓名","UTF-8"),
        URLEncoder.encode("黄某人","UTF-8")
);

读取带中文的cookie

//读取带中文的cookie
if(req.getCookies() != null){
    for(Cookie cookie : req.getCookies()){
        String name = URLDecoder.decode(cookie.getName(),"UTF-8");
        String vlaue = URLDecoder.decode(cookie.getValue(),"UTF-8");
    }
}

cookie的优缺点

优点

  可以配置到期规则

  就只包含键值对,使用简单

  持久性:cookie在过期之前可一直存在客户端浏览器上

缺点

  大小收到限制,大多数浏览器都会显示cookie的大小为4k、8k以下

  潜在的安全风险,cookie可能会被篡改。

  

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/14284253.html