JavaScript通过document.cookie设置和读取Cookie,需手动拼接字符串格式、处理编码及过期等参数;读取时需解析分号分隔的字符串并解码;删除则通过覆盖同名过期Cookie实现。

JavaScript 中设置和读取 Cookie 主要通过 document.cookie 这个接口完成。它不是标准的对象 API,而是一个“伪属性”——读写都走字符串解析逻辑,需要手动拼接格式、处理编码和有效期等细节。
设置 Cookie(带参数)
设置 Cookie 本质是给 document.cookie 赋值一个符合格式的字符串。基本语法如下:
-
键值对:用
=连接,如username=john -
分隔符:多个 Cookie 用分号加空格
;分隔 -
可选属性:跟在值后面,用分号分隔,常见有:
expires=GMT 时间字符串(绝对过期时间)max-age=秒数(相对过期时间,优先级高于 expires)path=/(默认为当前路径,设为/可全站访问)domain=.example.com(指定域名,支持子域共享)secure(仅 HTTPS 传输)HttpOnly(JS 无法读取,需服务端设置)SameSite=Lax(防 CSRF,可选Strict或None)
示例(设置一个 7 天后过期、全站可读、HTTPS 专用的 Cookie):
document.cookie = "theme=dark; max-age=604800; path=/; domain=.myapp.com; secure; SameSite=Lax";读取 Cookie(手动解析)
document.cookie 返回的是一个长字符串,形如:
立即学习“Java免费学习笔记(深入)”;
它只包含 name=value 部分,不返回 expires、path 等元信息。要获取某个 Cookie 的值,需自行按分号分割、再按等号提取:
- 用
document.cookie.split('; ')拆成数组 - 遍历每个项,用
.split('=', 2)拿到键和值(注意只切一次,避免值里含=) - 用
decodeURIComponent()解码(因为 Cookie 值会被自动编码)
简易读取函数示例:
function getCookie(name) {const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [key, value] = cookie.split('=', 2);
if (key === name) return decodeURIComponent(value);
}
return undefined;
}
console.log(getCookie('theme')); // "dark"
删除 Cookie(覆盖过期)
Cookie 不能直接删除,只能通过设置一个**已过期的同名 Cookie**来清除。关键是让 expires 设为过去的时间(如 1970 年),并确保 path 和 domain 与原 Cookie 一致,否则可能删不掉。
- 最简方式:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;" - 推荐用
max-age=0(更清晰):document.cookie = "username=; max-age=0; path=/;"
注意事项和替代方案
原生 Cookie 操作繁琐且易出错,实际开发中建议:
- 使用成熟工具库,如 js-cookie(轻量、自动编码/解码、链式调用)
- 敏感数据(如 token)尽量不用 Cookie 存储,或务必配合
HttpOnly + Secure + SameSite - 现代场景下,优先考虑
localStorage/sessionStorage(无自动 HTTP 发送、容量更大),但它们不随请求发送,无法替代服务端鉴权所需的 Cookie - 注意跨域限制:前端 JS 只能操作当前域名下的 Cookie,且受
SameSite策略影响


















