COOKIE介绍
介绍
cookie是有服务器生成保存在客户端的一种信息载体,载体中存放着用户访问该站点的会话状态信息。
用户在提交第一次请求后,由服务器生成cookie,并将其封装在响应头中以响应的形式发送给客户端,客户端接收到响应时将cookie保存到客户端(一般保存在磁盘中),当客户端再次发送同类请求(资源路径相同的请求,域名相同)时后,在请求中会携带保存在客户端的cookie数据,由服务器对会话进行跟踪。
cookie是由多个键值对组成的。
优缺点
- 提高访问服务器的效率
- 由于cookie信息储存在本地,所以安全性比较差
服务器端生成cookie
@RestController
public class CookiePractice extends HttpServlet {
@Override
@GetMapping("/testone")
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//创建两个cookie
Cookie cookie1 = new Cookie("company","neu");
Cookie cookie2 = new Cookie("emp","zhangsan");
/*
* 设置cookie有效时间
* 整型值,单位为秒
* 1.当值大于0时,表示Cookie存放在客户端的硬盘中
* 2.当值小于0时,与不设置效果相同,表示Cookie存放在浏览器中的缓存中
* 3.该值等于零时,表示cookie一生成即失效
* */
cookie1.setMaxAge(60 * 60);//设置有效期为一个小时
cookie2.setMaxAge(60 * 60 * 24 * 10);//设置有效期为10天
System.out.println(req.getContextPath());
//设置cookie绑定的路径
//setPath详细介绍参考 http://blog.sina.com.cn/s/blog_a77587820101mcb7.html
cookie1.setPath(req.getContextPath() + "/");
cookie2.setPath(req.getContextPath() + "/");
//在响应中添加Cookie
resp.addCookie(cookie1);
resp.addCookie(cookie2);
}
}
浏览器查看效果
获取cookie
客户端进行/testtwo请求时带有上面 /testone 请求生成之后响应给客户端的cookie。
@RestController
public class CookiePracticeTwo extends HttpServlet {
@Override
@GetMapping("/testtwo")
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取请求中的cookie
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies){
System.out.println(cookie.getName() + "---------" + cookie.getValue());
}
}
}
执行结果
/testtwo使用cookie
@RestController
public class CookiePracticeTwo extends HttpServlet {
@Override
@GetMapping("/testtwo")
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取请求中的cookie
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies){
//System.out.println(cookie.getName() + "---------" + cookie.getValue());
if (cookie.getName().equals("emp") && cookie.getValue().equals("zhangsan")){
//一系列操作
}else{
//一系列操作
}
}
}
}
//一系列操作
}else{
//一系列操作
}
}
}
}