skip to content

🍪Cookie 学习记录

  • 存储在浏览器的一段字符串(最大 5kb)
  • 跨域不共享
  • 格式如 k1=v1;k2=v2;k3=v3 因此可以存储结构化数据
  • 每次发送 http 请求,会将请求域的 Cookie 一起发送给 Server
  • Server 可以修改 Cookie 并返回给浏览器
  • 浏览器也可以 JS 修改 Cookie (有限制)
  • 控制台 Network
  • 控制台 Application ==> Storage ==> Cookies
  • document.cookie
  • 通过累加的方式对 Cookie 赋值

    document.cookie = 'k1=100;'
    document.cookie = 'k2=200;'
    document.cookie // "k1=100; k2=200"
    
const cookie = {}
const cookieText = req.headers.cookie || ''
cookieText.split('; ').forEach(item => {
  if (!item) return
  const [key, value] = item.split('=')
  cookie[key] = value
})
console.log('cookie', cookie) // { k1: '100', k2: '200', k3: '300' }
// 设置一个 Cookie
res.setHeader('Set-Cookie', 's1=100; path=/')
// 设置多个 Cookie (使用数组)
res.setHeader('Set-Cookie', ['s1=100; path=/', 's2=200; path=/'])
// 限制服务端修改 Cookie (httpOnly)
res.setHeader('Set-Cookie', 's1=100; path=/; httpOnly')
// 添加过期时间 (使用 Date.prototype.toUTCString())
res.setHeader('Set-Cookie', 's1=100; path=/; httpOnly; Wed, 01 Aug 2020 06:00:00 GMT')