Cookie 是服务器保存在浏览器的一小段文本信息,一般大小不能超过 4 KB。浏览器每次访问服务器,会自动附上这段信息
Cookie 主要用于保存状态信息,以下是一些主要用途:
- 对话管理:保存登陆、购物车等需要记录的信息;
- 个性化信息: 保存用户的偏好,比如网页的字体大小,背景颜色等
- 追踪用户:记录和分析用户行为
缺点
Cookie 的容量很小,只有 4 KB,缺乏数据操作的接口,而且会影响性能。客户端存储应该使用 Web storage 和 IndexedDB,只有那些每次请求需要让服务端知道的信息,才应该放在 Cookie。
Cookie 与 HTTP 协议
Cookie 由 HTTP 协议生成,也主要供 HTTP 协议使用
HTTP 响应:Cookie 的生成
服务器如果希望在浏览器保存 Cookie,就要在 HTTP 响应的头信息里面,放置一个 Set-Cookie 字段
HTTP 请求:Cookie 的发送
浏览器向服务器发送 HTTP 请求时,每个请求都会带上 Cookie,这时要使用 HTTP 头信息的 Cookie 字段
Cookie 的属性
- Expires:过期时间,到了指定事件之后,浏览器不再保留这个 Cookie
- Max-Age:指从现在开始,cookie 存在的秒数,过了这个时间,浏览器将不再保留这个 Cookie
- Domain:指定浏览器发出请求时,哪些域名附带这个 Cookie
- Path:指定浏览器发出请求时,哪些路径附带这个 Cookie
- Secure: 指定浏览器只有在 HTTPS 协议下,才可以发送这个 Cookie
- HttpOnly:指定该 Cookie 无法通过 JS 脚本拿到。主要限制 document.cookie,XMLHttpRequest 对象和 Request API 都拿不到该属性
- SameSite:用于防范 CSRF 攻击和用户追踪,有三个值可选
- Strict:完全禁止第三方 Cookie,跨站点时,任何情况下都不发送 Cookie
- Lax:大多数情况下不发送 Cookie,但是导航到目标网址的 GET 请求除外
- None:显式关闭 SameSite,但同时需要设置 HttpOnly
document.cookie
用于读写当前网页的 Cookie,读取时会读取当前网页所有没有设置 HttpOnly 的 Cookie ,而且写入时是添加,不是覆盖,等号两边不能有空格
document.cookie = 'test1=hello';
document.cookie = 'test2=world';
document.cookie
// test1=hello;test2=world
必须 注册 为本站用户, 登录 后才可以发表评论!