document.cookie 是读写 HTTP Cookie 的接口,返回 URL 编码的键值对字符串,不包含 Path、Domain 等属性,HttpOnly Cookie 不可读;需手动解析为对象,写入需指定 path/domain 以确保删除有效;敏感数据应由服务端管理。

不能通过 document.cookie 直接“查询 DOM”——这是常见误解。document.cookie 是用于读写浏览器 Cookie 的接口,和 DOM 查询(如 document.getElementById、querySelector)完全无关。它不操作页面元素,只处理 HTTP Cookie 字符串。
document.cookie 读取的是字符串,不是对象
document.cookie 是一个特殊的 accessor 属性:读取时返回当前域名下**所有可访问 Cookie 的键值对字符串**,格式为:
注意:
- 不包含 Path、Domain、HttpOnly、Secure 等属性(这些仅服务端可见或受浏览器保护);
- 若 Cookie 被标记为 HttpOnly,JavaScript **完全无法读取**,document.cookie 中不会出现该条目;
- 所有值都是 URL 编码的(如空格变 %20),需用 decodeURIComponent() 解码。
手动解析 cookie 字符串为对象
原生不提供解析方法,需自行拆分。推荐轻量健壮的解析逻辑:
- 用
document.cookie.split('; ')拆成键值对数组(注意分号后带空格) - 对每项用
split('=', 2)分离 key 和 value(防止 value 含等号) - 用
decodeURIComponent()解码 key 和 value - 过滤空 key,避免脏数据
示例函数:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
function parseCookies() {
const cookies = {};
document.cookie.split('; ').forEach(pair => {
const [key, value] = pair.split('=', 2);
if (key) {
cookies[decodeURIComponent(key)] = decodeURIComponent(value || '');
}
});
return cookies;
}
// 使用
const cookies = parseCookies();
console.log(cookies.theme); // 如 'dark'
写入与删除 cookie 的基本要点
写入通过赋值 document.cookie 实现,格式必须是 key=value; options:
- 设置:
document.cookie = "theme=dark; path=/; max-age=604800"; - 删除:设
max-age=0或expires=过去时间,且path和domain必须与原设置一致,否则删不掉 -
path默认为当前路径,跨路径访问需显式指定(如path=/) - 安全相关:含
Secure表示仅 HTTPS 传输;SameSite=Lax/Strict控制跨站请求携带
更可靠的做法:优先使用服务端管理或现代替代方案
Cookie 机制老旧、易出错、安全性受限(尤其 HttpOnly 无法 JS 访问)。实际开发中建议:
- 用户登录态、敏感信息交由后端签发 JWT 或 session,并设
HttpOnly + Secure + SameSiteCookie - 前端轻量偏好(如主题、语言)可用
localStorage替代,更易读写、无自动发送开销 - 若必须用 Cookie,推荐封装工具函数或使用成熟库(如
js-cookie),它已处理编码、作用域、过期等细节

















