什么是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可能会被篡改。