前端杂谈 · Web

Cookie

小编 · 7月26日 · 2020年

Cookie 是服务器保存在浏览器的一小段文本信息,一般大小不能超过 4 KB。浏览器每次访问服务器,会自动附上这段信息

Cookie

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
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!