Cookie是用来追踪浏览器用户身份的会话方式。
Cookie是某些网站为了辨别用户身份而存储再用户本地终端上的数据(通常进行了加密)。
Cookie存放再客户端,一般用来保存用户信息。

应用场景

  • 可以在cookie中保存已经登录过的用户信息,下次访问网站的时候,页面可以自动帮把登录的一些信息给填了。同时,cookies还能保存用户首选项,主题和其他设置信息。
  • 使用cookie保存session或者token,向后端发送请求的时候带上cookie,这样后端就能取到session或者token。这样就能记录当前用户的状态,因为Http协议是无状态的。
  • cookie还可以用来记录和分析用户行为。比如在网上购物,因为Http协议是无状态的,如果服务器想要获取你在某个页面停留状态或者看了哪些商品,此时就可以讲这些信息存放在cookie中。

Cookie参数设置

参数名 作用 后端设置方法
Max-Age 设置cookie的过期时间,单位为秒 cookie.setMaxAge(10)
Domain 指定cookie所属域名 cookie.setDomain("")
Path 指定cookie所属路径 cookie.setPath("")
HttpOnly 告诉浏览器此cookie只能通过http协议传输,禁止其他方式访问 cookie.setHttpOnly(true)
Secure 告诉浏览器此cookie只能通过https安全协议传输,禁止使用http方式访问 cookie.setSecure(true)

如何在服务端使用Cookie

设置cookie返回给客户端

  1. @GetMapping("/changeUsername")
  2. public String setCookie(HttpServletResponse response) {
  3. // 创建一个 cookie
  4. Cookie cookie = new Cookie("username", "huangyaoxin");
  5. // 设置cookie过期时间
  6. cookie.setMaxAge(7 * 24 * 60 * 60);
  7. // 添加到response中
  8. response.addCookie(cookie);
  9. return "username is changed!";
  10. }

使用 @CookieValue 注解获取特定的cookie的值

  1. @GetMapping("/")
  2. public String readCookie(@CookieValue(value="username", defalut="hyx") String username) {
  3. return "My name is " + username;
  4. }

读取所有的Cookie值

  1. @GetMapping("/")
  2. public String readAllCookies(HttpServletRequest request) {
  3. Cookie[] cookies = request.getCookies();
  4. if(cookies != null) {
  5. return Arrays.stream(cookies).map(c -> c.getName() + "=" + c.getValue())
  6. .collect(Collectors.joining(", "));
  7. }
  8. return "No Cookies";
  9. }