Cookie 技术其实是浏览器端的数据存储技术,解决了不同请求需要使用相同的请求数据的问题。我们把请求需要共享的请求数据,存储在浏览器端,避免用户进行重复的书写请求数据。特点:Cookie技术是浏览器端的数据存储技术,通过键值对的方式来存储数据,适合少量的数据,Cookie技术是不安全的。Cookie有两种数据存储方式,一种是临时存储,不设置 cookie 信息的存储时间,周期为一次会话,存储在浏览器内存中;还有一种是定时存储,设置存储时间,周期为时间设置,存储在用户电脑中。浏览器对于单个Cookie的大小有限制(4kb)以及对同一个域名下的总Cookie数量也有限制(20个)。
1、 一次可以发送多个Cookie,默认情况下,当浏览器关闭后,Cookie数据就被销毁,
/*创建Cookie*/
@RequestMapping("/cookieDome")
@ResponseBody
public void cookieDome(HttpServletResponse response){
//1、创建Cookie对象
Cookie c = new Cookie("user","zhangsan");
Cookie h = new Cookie("password","123456");
//2、发送Cookie
response.addCookie(c);
response.addCookie(h);
}
/*获取Cookie*/
@RequestMapping("/cookieDome2")
@ResponseBody
public void cookieDome2(HttpServletRequest request){
//3、获取Cookie
Cookie[] cs = request.getCookies();
//获取数据。遍历Cookie
if(cs!=null){
for (Cookie c:cs){
System.out.println(c.getName());//打印:user,password
System.out.println(c.getValue());//打印:zhangsan,123456
}
}
}
2、 设置Cookie的存活时间,如果被持久化存储,要等设置时间过或手动设置过期,Cookie才会被销毁。 SetMaxAge(整数):
2-1、正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后, Cookie文件自动失效
2-2、负数:默认值
2-3、 零:删除Cookie信息
/*设置Cookie存活时间*/
@RequestMapping("/cookieDome3")
@ResponseBody
public void cookieDome3(HttpServletResponse response){
//1、创建Cookie对象
Cookie c = new Cookie("user","lisi");
//2、设置cookie存活时间
//将cookie持久化到硬盘,30秒后会自动删除cookie文件
c.setMaxAge(30);
//默认值
// c.setMaxAge(-2);
//3、发送Cookie
response.addCookie(c);
}
/*销毁Cookie信息*/
@RequestMapping("/cookieDome4")
@ResponseBody
public void cookieDome4(HttpServletRequest request,HttpServletResponse response){
//4、获取Cookie
Cookie[] cs = request.getCookies();
//获取数据。遍历Cookie
if(cs!=null){
for (Cookie c:cs){
if(c.getName().equals("user")){
//直接删除cookie信息
c.setMaxAge(0);
//发送Cookie
response.addCookie(c);
break;
}
}
}
}
3、Cookie中文问题:
3-1、在tomcat 8之前Cookie中不能直接存储中文数据。需要将中文数据转码—一般采用URL编码(%E3) (包括空格也要用)
3-2、在tomcat 8之后, cookie支持中文数据。
4、Cookie共享:设置path,让当前服务器下部署的所有项目共享Cookie信息
@RequestMapping("/cookieDome5")
@ResponseBody
public void cookieDome5(HttpServletResponse response){
//1、创建Cookie对象
Cookie c = new Cookie("msg","共享");
//设置path,让当前服务器下部署的所有项目共享Cookie信息
c.setPath("/"); //8080端口根目录
//3、发送Cookie
response.addCookie(c);
}