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) {
// 创建一个 cookie
Cookie 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";
}