JavaScript仅能操作未设HttpOnly标志的Cookie;通过document.cookie读取需手动解析键值对并解码,写入需指定key=value及属性,删除则用max-age=0覆盖同名Cookie。

JavaScript 只能操作未设置 HttpOnly 标志的 Cookie。一旦服务端在 Set-Cookie 响应头中设置了 HttpOnly,该 Cookie 就无法通过 document.cookie 读取或修改,这是浏览器的安全限制,无法绕过。
读取非 HttpOnly Cookie
使用 document.cookie 可以获取当前域名下所有**可访问的、非 HttpOnly 的 Cookie 字符串**,格式为 key1=value1; key2=value2; key3=value3。需要手动解析才能提取指定键的值:
- 用
split('; ')拆分成键值对数组 - 对每项再用
split('=')分离 key 和 value - 注意空格和 URL 编码(需用
decodeURIComponent)
简单封装示例:
function getCookie(name) {const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const [key, value] = cookie.split('=');
if (key === name) {
return decodeURIComponent(value);
}
}
return undefined;
}
写入(设置)非 HttpOnly Cookie
通过给 document.cookie 赋值字符串来设置 Cookie。必须包含 key=value,还可追加分号分隔的属性:
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
expires或max-age:控制有效期(不设则为会话级) -
path:默认/,建议显式指定(如path=/) -
domain:仅限当前域或其父域(不能跨主域) -
secure:仅 HTTPS 传输(若页面是 HTTP,则设了也无效) -
samesite:可选Lax或Strict(注意大小写)
示例(设置 7 天有效期、全站路径、HTTPS 限定):
document.cookie = "username=JohnDoe; max-age=604800; path=/; domain=.example.com; secure; samesite=Lax";删除非 HttpOnly Cookie
本质是「覆盖写入一个已过期的同名 Cookie」。关键点:
- key 名称、
path、domain必须与原 Cookie 完全一致,否则删不掉 - 将
expires设为过去时间(如Thu, 01 Jan 1970 00:00:00 GMT),或max-age=0 - 推荐用
max-age=0,更简洁可靠
示例(删除上面设置的 username):
document.cookie = "username=; max-age=0; path=/; domain=.example.com; secure; samesite=Lax";注意事项与常见问题
以下情况会导致操作失败或行为异常:
- 协议不匹配:HTTP 页面无法设
secureCookie;HTTPS 页面可以读 HTTP 页面设的非 secure Cookie(但现代浏览器可能限制) - 路径不一致:如果原 Cookie 是
path=/admin,删除时没写path=/admin就删不掉 - 子域差异:设在
domain=.example.com的 Cookie,可用example.com或app.example.com删除;但设在app.example.com的,不能用example.com删除 - 编码问题:value 中含特殊字符(如空格、分号、等号)必须用
encodeURIComponent编码,读取时对应解码

















