基本介绍
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。
主要作用
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
生命周期
- 会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie 也会被保留下来,就好像浏览器从来没有关闭一样,这会导致 Cookie 的生命周期无限期延长。
- 持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间。
限制访问
- HttpOnly 可以保证 cookie 无法被 js 读取
- Secure 会保证 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端
作用域
Domain
若不指定,则默认为 origin,不包含子域名。若设置,一般就指定子域名(因此指定后番位应该会更大)
Path
哪些路径可以接受 cookie
SameSite
作用:可以让浏览器在处于跨站状态时不发送 cookie
可能值
- None。浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写。(最为宽松,必须通过 HTTPS 发送,旧浏览器默认政策)
- Strict。浏览器将只在访问相同站点时发送 cookie。(在原有 Cookies 的限制条件上的加强,如上文 “Cookie 的作用域” 所述)
- Lax。与 Strict 类似,但用户从外部站点导航至URL时(例如通过链接)除外。 在新版本浏览器中(Chrome 80+),为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者 frames 的调用,但只有当用户从外部站点导航到URL时才会发送。如 link 链接
三方 cookie
定义: 对于服务器来说 cookie 不存在一方和三方的区别。在浏览器上的具体页面,才存在这个区别
浏览器指纹
- Canvas 绘制图片
- WebGL
- WebRTC 获取 IP
- 系统版本+浏览器版本+语言+时区+ HTTP Header