Skip to content

前端工程化-什么是cookie

1. 为什么需要cookie

  • cookie的出现是为了解决http连接无状态的问题
  • cookie里面可以存储的东西很多,比如用户的偏好设置,等等
  • 运营商可以基于cookie进行广告的推送,收集用户的隐私数据等等。

2. cookie工作原理

  • cookie是一种小型文本文件,首先在服务端产生
  • 用户访问网站的时候,服务端会发送一个包含cookiehttp响应
  • 客户端会把cookie存储在本地
  • 以后的每一次重新访问,cookie都会发送回服务端,服务端用它来做身份辨认
  • 最新的RFC规范:RFC6265
  • 通过键值对的形式存放cookie
  • 大小一般在4k左右

image.png|500


  1. cookie是怎么产生的?
  • 服务器产生的,用来记录客户端的信息
  1. cookie放在哪里?
  • 放在客户端,需要频繁和服务端通信

3. cookie组成部分

lua
name: 名称
value:cookie的值
domain: 可以使用此cookie的域名
path: 可以使用此cookie的页面路径
expire: cookie的超时时间
secure: 是否只能通过https来传递这条cookie

https://cshihong.github.io/2019/06/19/HTTP协议分析/

image.png|450


  • 实际拿到的cookie如下所示: image.png

  • 通过 [name, domain, path] 唯一确定一条 cookie

  • 怎么理解 ”写时带属性,读时无属性“?

    • 写:服务端往客户端写数据,需要给出种种描述性质的属性,客户端才能明白服务端具体做了什么设置。比如:Set-Cookie: sessionId=12345; Domain=example.com; Path=/; Expires=Wed, 21 Oct 2021 07:28:00 GMT; Secure; HttpOnly等等。
    • 读:服务端只需要知道一件事情——”你(服务端)是谁“ ,因此仅仅需要发送cookie的值和名称即可。Cookie: sessionId=12345
    • 这么做的好处是什么?减少请求头的大小,从而降低网络的开销。

[!attention] 注意:如果是JWT鉴权,这么做显然就不合适了,客户端仅仅发送Session ID回去是不行的,需要通过JWT token判断你是谁