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返回给客户端
@GetMapping("/changeUsername")public String setCookie(HttpServletResponse response) {// 创建一个 cookieCookie cookie = new Cookie("username", "huangyaoxin");// 设置cookie过期时间cookie.setMaxAge(7 * 24 * 60 * 60);// 添加到response中response.addCookie(cookie);return "username is changed!";}
使用 @CookieValue 注解获取特定的cookie的值
@GetMapping("/")public String readCookie(@CookieValue(value="username", defalut="hyx") String username) {return "My name is " + username;}
读取所有的Cookie值
@GetMapping("/")public String readAllCookies(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if(cookies != null) {return Arrays.stream(cookies).map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));}return "No Cookies";}
