JavaScript操作Cookie通过document.cookie字符串实现,需手动解析拼接;写入须用GMT时间格式(非毫秒),路径、域名等属性需显式设置;读取需split分割并处理编码;注意大小限制、安全属性及Samesite防护。

JavaScript中操作Cookie本质上是通过document.cookie这个接口完成的,它既不是真正的对象,也不是数组,而是一个特殊格式的字符串。读写都需要手动解析和拼接,过期时间也必须按固定语法设置,稍不注意就容易失效。
写入Cookie:键值对 + 属性参数
写入Cookie就是给document.cookie赋值一个符合规范的字符串。基本格式为:key=value; expires=GMTString; path=/; domain=.example.com; secure; HttpOnly(注意分号分隔,空格可选)。
-
必需项:至少包含一个键值对,如
username=john -
过期时间:用
expires后接格林威治时间字符串(不是毫秒数),例如expires=Wed, 01 Jan 2025 00:00:00 GMT;设为过去时间可立即删除 -
作用路径:推荐显式指定
path=/,否则默认为当前页面完整路径,导致其他页面读不到 -
作用域:跨子域共享需加
domain=.example.com(注意开头的点) -
安全限制:
secure表示仅HTTPS传输,HttpOnly无法被JS读取(服务端设置)
读取Cookie:手动解析字符串
document.cookie返回的是一个以分号加空格分隔的字符串,例如"username=john; theme=dark; token=abc123"。JS没有内置解析方法,需自行拆分处理:
- 用
document.cookie.split('; ')切分成键值对数组 - 对每个项用
.split('=')分离key和value,注意value可能含等号(如base64编码),实际项目中建议避免 - 用
decodeURIComponent()解码value(写入时应配合encodeURIComponent()) - 封装成工具函数更可靠,比如
getCookie('username')返回对应值,不存在则返回undefined
设置过期时间:别用毫秒,要用GMT字符串
很多人误以为expires=1735689600000(时间戳)能生效,其实不行——expires只接受RFC 7231标准的GMT格式日期字符串。
立即学习“Java免费学习笔记(深入)”;
- 正确做法:用
new Date().toUTCString()生成,例如7天后:new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toUTCString() - 也可用
max-age替代(单位秒),如max-age=604800,兼容性略差于expires,但更直观 - 若不设过期时间,Cookie为会话级(关闭浏览器即失效)
注意事项与常见陷阱
Cookie有大小限制(单个域名通常4KB)、数量限制(浏览器差异大),且每次HTTP请求都会自动携带,影响性能。
- 中文或特殊字符务必用
encodeURIComponent()编码,否则可能截断或报错 - 同名Cookie会被新值覆盖,但路径(
path)或域名(domain)不同则视为不同Cookie - Samesite属性(
SameSite=Lax或Strict)可防范CSRF,现代项目建议加上 - 隐私模式或禁用Cookie的浏览器中,操作会静默失败,应有降级方案(如localStorage备用)










