Cookie的含义

Posted by 汤键|兔子队列 on March 4, 2022 禁止转载
本文总共 1987 字 · 阅读全文大约需要 6 分钟

概念

  • Cookie,类型为“小型文本文件”
  • 是由用户客户端计算机暂时或永久保存的信息,是以Key,Value的形式存储在浏览器端的数据
  • 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上
  • 是网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)
  • Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能
  • Cookie 是不可跨域的,每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)

工作原理

  • 在Request的时候,浏览器将Cookie信息放在HTTP-Request Headers中
  • 在Response的时候,浏览器保存HTTP-Response Headers信息中的Cookie信息
  • Cookie的核心信息包含三个部分:Name、Value、过期时间
  • Cookie的保存是覆盖式的,所以Cookie的添加、更新、删除对于浏览器来说都是执行设置(set)的动作

应用场景

  • 1-会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 2-个性化设置(如用户自定义设置、主题等)
  • 3-浏览器行为跟踪(如跟踪分析用户行为,广告追踪等)
  • 常见于搜索引擎或者广告联盟
  • 比如 icpc.cloud 引入了百度站长统计,用户访问时,百度就会为用户生成一个唯一标识存储在Cookie中
  • 当用户下次访问的时候,百度就知道你是不是 icpc.cloud 的老用户
  • 另外如果你访问的很多网站都引入百度统计或者百度广告联盟的,那么百度就会根据你的浏览行为进行分型,最终形成你的用户画像,年龄、性别、爱好甚至年龄范围等等
  • 所以,如果你讨厌广告追踪,你可以安装广告屏蔽插件,或者养成关闭浏览器就清除Cookie的习惯

存储特点

  • 1-存储大小受限,跟浏览器版本有关
  • 2-存储条数受限,跟浏览器版本有关
  • 3-字符编码为Unicode,不支持直接存储中文
  • 4-存储内容可以被轻松查看,不建议存储敏感信息
  • 5-可靠性差,可能随时都会因为各种原因被删除
  • 6-存储属性除了Name、Value、过期时间,还有Domian、Path
  • domain:指定 cookie 所属域名,默认是当前域名
  • path 指定 cookie 在哪个路径(路由)下生效,默认是 ‘/’
  • 如果设置为 /abc,则只有 /abc 下的路由可以访问到该 cookie,如:/abc/read
  • 当前域可以操作当前域子域、父域名的Cookie
  • 当前Path,可以操作当前Path以及当前Path子、父Path下的Cookie

传输特点

  • 1-每次Request客户端符合domian以及path要求的Cookie都会通过Request Headers传输到服务器端
  • 2-传输的Cookie大小会受到浏览器以及Web服务器的限制

安全特点

  • Cookie中的信息很容易被查看,建议加密后存储
  • Cookie容易被XSS攻击利用,可以设置HttpOnly=true,不允许客户端读写

使用建议

  • 不要保存未经加密的敏感信息(安全性)
  • 如果不需要在客户端访问,要设置HttpOnly=true(安全性)
  • 设置合理的过期时间(传输效率)
  • 不要存储过大的内容(传输效率)
  • 不要存储过多的条目(传输效率)
  • 设置合理的domian、path,减少不必要的Cookie传输(传输效率)
  • 不要存储非Unicode字符(可用性)
  • 不要存储不可恢复的信息(可靠性)

使用流程

  • 1-客户端发送一个请求到服务器
  • 2-服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部
  • Cookie 的过期时间、域、路径、有效期、适用站点都可以根据需要来指定
  • 一个简单的 Cookie 可能像这样:Set-Cookie:=
  • 服务器通过该头部告知客户端保存 Cookie 信息
  • 3-客户端保存Cookie,之后每次HttpRequest请求中会包含一个Cookie的头部
  • 4-服务器返回响应数据
  • Response Headers中包含Set-Cookie头部,而Request Headers中包含了Cookie头部
  • Cookie 会随网域的所有权区分成「第一方 Cookie」及「第三方 Cookie」
  • 两者差异在于:
  • 第一方 Cookie(First-Party):主要直接来自于使用者所造访、浏览网站所建立的
  • 只用于记录在该「存取网站之内」,一旦跳离该网站,所有纪录都不会被追踪
  • 第三方 Cookie (Third-Party):来自不同网站、第三方网站所提供的 Cookie,此数据最常见用于广告投放
  • 例如:你在 A 网站逛衣服时,跳到 B 网站时,会出现你刚刚在 A 网站浏览或点击过的衣服,你的网络足迹无所遁形,这也是造成要限制第三方 Cookie 的原因之一
  • 700
  • 网站通常都会安装第三方 Cookie,Safari 目前已预设阻挡第三方追踪