Cookie、localStorage、sessionStorage 的区别?

对比

特性 Cookie localStorage sessionStorage
大小 ~4KB ~5MB ~5MB
生命周期 可设置过期时间 永久 关闭标签页清除
请求携带 ✅ 自动携带 ❌ ❌
作用域 域名+路径 域名 标签页
API document.cookie getItem/setItem getItem/setItem
安全 HttpOnly/Secure 无 无
适用 认证 Token 持久化数据 临时会话数据

Cookie

// 设置 Cookie
document.cookie = 'name=Tom; max-age=3600; path=/; Secure; SameSite=Strict'

// 读取(返回所有 cookie 字符串)
console.log(document.cookie) // 'name=Tom; age=25'

// 服务器设置
Set-Cookie: token=abc; HttpOnly; Secure; SameSite=Strict; Max-Age=3600

Cookie 属性:

localStorage

// 存储
localStorage.setItem('user', JSON.stringify({ name: 'Tom' }))

// 读取
const user = JSON.parse(localStorage.getItem('user'))

// 删除
localStorage.removeItem('user')

// 清空所有
localStorage.clear()

// 监听变化(跨标签页通信)
window.addEventListener('storage', (e) => {
  console.log(e.key, e.newValue)
})

sessionStorage

// API 与 localStorage 完全相同
sessionStorage.setItem('temp', 'data')
sessionStorage.getItem('temp')

// 生命周期:标签页关闭后清除
// 同源不同标签页的 sessionStorage 独立

使用场景

Cookie:

localStorage:

sessionStorage:

Token 存储方案

方案 XSS 风险 CSRF 风险 推荐
Cookie (HttpOnly) 低 中 ✅ 需配合 SameSite
localStorage 高 无 ❌ JS 可读取
内存变量 无 无 ✅ 刷新丢失

最佳实践

同分类其他题目