news 2026/9/2 22:35:04

JavaScript 的 `document.cookie`:99% 开发者都踩过的致命陷阱,你中招了吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript 的 `document.cookie`:99% 开发者都踩过的致命陷阱,你中招了吗?

你有没有过这种崩溃时刻?用户登录后,一刷新页面就自动登出;购物车内容莫名消失;甚至在测试环境好好的功能,一上线就“人间蒸发”……别急,问题很可能藏在document.cookie里——这个被无数开发者当作“万能钥匙”的属性,实则是个披着羊皮的狼!今天,我作为混迹前端圈十年的老炮,带你撕开它的伪装,从原理到血泪教训,手把手教你避开这些“隐形炸弹”。


一、document.cookie:你以为的“简单字符串”,其实是座数据矿场

别被名字骗了!document.cookie不是普通字符串,而是一个可读可写的字符串属性,它存储了当前域名下所有 cookie 的键值对(用;分隔)。比如:

// 假设已设置过 cookieconsole.log(document.cookie);// 输出: "username=John; theme=dark; session=abc123"

但真相是:它只负责“传递”数据,真正的操作逻辑藏在浏览器底层

  • 读取:直接读取字符串,但需手动解析(见下文)。
  • 写入:赋值时,浏览器会自动添加 cookie(如document.cookie = "token=xyz")。
  • ⚠️关键陷阱:如果你写document.cookie = "name=John"不会自动覆盖旧值!必须指定pathdomain,否则可能写到错误路径。

💡为什么开发者总栽跟头?因为它像“黑盒”:你只看到结果,却忽略了浏览器的隐式规则(比如默认path=/)。


二、Cookie 属性:90% 的人只用过namevalue,其他全是隐藏技能!

Cookie 的威力,全靠这些“魔法属性”加持。下面用真实场景拆解:

属性作用示例为什么重要?
expires设置过期时间(GMT 格式)expires=Wed, 31 Dec 2025 23:59:59 GMT不设就默认会话结束失效!常被忽略导致“登录状态消失”。
path指定 cookie 作用的路径path=/admin不设默认为当前路径!若路径不对,读不到值。
domain指定域名(跨子域时需设置)domain=example.comwww.example.com时,domain=example.com才能共享。
secure仅 HTTPS 下传输secure必须加!否则 HTTP 网站会泄露敏感数据
httpOnlyJavaScript 无法访问(防 XSS)httpOnly核心安全属性!但只能由服务器设置,JS 无法控制!

💡血泪案例:某电商项目因漏写path=/,用户在/checkout页面能读到cartcookie,但/product页读不到——排查一周才发现是路径问题!


三、实操指南:3 行代码搞定 cookie,但 90% 的人写错了!

✅ 正确操作(附安全建议):
// 1. 设置 cookie(安全版:带 expires、secure、path)functionsetCookie(name,value,days){constdate=newDate();date.setTime(date.getTime()+(days*24*60*60*1000));document.cookie=`${name}=${encodeURIComponent(value)}; expires=${date.toUTCString()}; path=/; secure`;}// 2. 读取 cookie(解析字符串)functiongetCookie(name){constnameEQ=`${name}=`;constcookies=document.cookie.split(';');for(leti=0;i<cookies.length;i++){letcookie=cookies[i].trim();if(cookie.indexOf(nameEQ)===0)returndecodeURIComponent(cookie.substring(nameEQ.length));}returnnull;}// 3. 删除 cookie(关键!设为过去时间)functiondeleteCookie(name){document.cookie=`${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;}

⚠️致命错误

  • 未用encodeURIComponent→ 用户名含&会破坏 cookie 结构(如name=John&age=30→ 变成两个 key)。
  • 忘记secure→ 开发时用http://测试,上线后 HTTPS 时 cookie 无法发送。

四、安全雷区:你的 cookie 可能正在被黑客“偷家”!

document.cookie是 XSS 攻击的头号目标!攻击者通过注入脚本,直接读取 cookie(如document.cookie被窃取)。

  • 防御铁律
    1. 关键 cookie(如 token)必须设httpOnly(服务器设置,JS 无法操作)。
    2. 所有 cookie 设secure(强制 HTTPS 传输)。
    3. 避免存储敏感数据:用sessionStorage或后端会话管理替代。

💡真实教训:某支付平台因未设httpOnly,黑客通过 XSS 获取用户 token,导致 5000+ 账户被盗!


五、进阶方向:别再手动操作 cookie,用库才是真·高手!

手动写 cookie 解析太容易出错,推荐用js-cookie(轻量级、安全封装):

// 用 js-cookie 代替原生操作Cookies.set('token','xyz',{expires:7,secure:true,path:'/'});Cookies.get('token');// 安全解析,自动处理编码Cookies.remove('token');
  • 为什么用它?它自动处理encodeURIComponentpath默认值,且避免 XSS 风险。
  • 进阶学习:深入研究Web 安全(OWASP Top 10)和HTTP 传输层安全(HSTS)。

结语:cookie 不是“玩具”,而是“责任”

document.cookie本质是浏览器的“数据存储通道”,但它的强大恰恰源于其脆弱性——一个参数疏忽,就可能让整个应用陷入危机。记住:安全不是“加个 flag”,而是刻进开发骨子里的习惯

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 9:05:24

【数据分享】上市公司高管风险偏好数据+dofile(2007-2024年)

而今天要限时免费分享的数据就是上市公司高管风险偏好数据dofile&#xff08;2007-2024年&#xff09; 数据介绍 数据概况 数据名称&#xff1a;上市公司高管风险偏好数据dofile&#xff08;2007-2024年&#xff09; 数据年份&#xff1a;2007-2024 年 数据范围&#xff1a…

作者头像 李华
网站建设 2026/9/1 3:39:34

【数据分享】安徽省路网数据安徽省路网分类数据(2025年)

而今天要说明数据就是安徽省路网数据安徽省路网分类数据(2025年) 数据概况 数据含城市次干道、城市支路、城市主干道、高架及快速路、郊区乡村道路、内部道路、人行道路、自行车道等&#xff08;具体请看截图&#xff0c;有些省份可能无法分类出自行车道&#xff09;。 详情…

作者头像 李华
网站建设 2026/8/26 11:26:46

没显卡怎么跑Qwen3-Reranker?云端GPU 1小时1块,小白5分钟上手

没显卡怎么跑Qwen3-Reranker&#xff1f;云端GPU 1小时1块&#xff0c;小白5分钟上手 作为一个前端开发者&#xff0c;你可能经常被各种新技术吸引&#xff0c;比如最近发布的Qwen3-Reranker模型。但当你兴冲冲地想体验一下时&#xff0c;却发现自己的MacBook没有独立显卡&…

作者头像 李华
网站建设 2026/9/1 6:24:47

FLUX.1-dev创意工作流:自由职业者用云端GPU接单神器

FLUX.1-dev创意工作流&#xff1a;自由职业者用云端GPU接单神器 你是不是也遇到过这种情况&#xff1a;客户发来一个复杂的插画需求&#xff0c;提示词写得满满当当&#xff0c;刚点下“生成”按钮&#xff0c;电脑风扇就疯狂咆哮&#xff0c;几秒后直接蓝屏重启&#xff1f;攒…

作者头像 李华
网站建设 2026/8/31 15:12:03

年龄性别识别模型部署的3种省钱姿势

年龄性别识别模型部署的3种省钱姿势 你是不是也遇到过这样的情况&#xff1a;作为自由开发者&#xff0c;接了多个客户的人脸分析项目&#xff0c;有的要做美颜App的用户画像&#xff0c;有的是商场客流统计&#xff0c;还有的是互动娱乐小程序。每个项目都要求部署年龄性别识…

作者头像 李华
网站建设 2026/9/2 21:03:44

Qwen3-4B多模态体验:预装好所有依赖,打开浏览器就用

Qwen3-4B多模态体验&#xff1a;预装好所有依赖&#xff0c;打开浏览器就用 你是不是也遇到过这种情况&#xff1f;作为一名多媒体专业的学生&#xff0c;想测试一下最新的Qwen3-4B模型对图片的理解能力——比如让它分析一张海报的设计风格、识别照片中的物体关系&#xff0c;…

作者头像 李华