如何操作Cookie_JavaScript中如何读取和设置Cookie

发布时间 - 2026-01-06 00:00:00    点击率:
JavaScript 中设置 Cookie 需通过 document.cookie = "key=value; expires=...; path=/; domain=..." 字符串赋值,必须显式指定 expires/max-age、path 和 domain 才能正确覆盖或删除;读取需正则解析并 decodeURIComponent;删除本质是写入过期同名 Cookie,且 path/domain 必须严格匹配原值。

JavaScript 中如何用 document.cookie 设置 Cookie

设置 Cookie 的本质是给 document.cookie 赋一个字符串,浏览器会自动解析并存储。但要注意:它不支持直接传入对象或配置项,所有参数必须拼成键值对加属性的形式。

  • 基本格式:document.cookie = "key=value; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.example.com; secure; HttpOnly"
  • expiresmax-age 必须显式设置,否则是会话级(关闭浏览器即失效)
  • path 默认是当前路径,若想让子路径也能读取,建议设为 path=/
  • domain 若带点开头(如 .example.com),表示允许子域名共享;不带点则严格匹配当前 host
  • secure 表示仅 HTTPS 下发送;HttpOnly 是服务端设置的,JS 无法通过 document.cookie 设定

JavaScript 中如何安全读取 document.cookie

document.cookie 返回的是一个分号分隔的字符串,比如 "a=1; b=2; c=hello%20world"。它不会返回 expirespath 等元信息,也不能区分同名不同 path/domain 的 Cookie。

  • 手动解析需注意 URL 编码:decodeURIComponent() 必须用于 value 部分
  • 不能用 split(";") 简单切分——value 里可能含分号(虽少见,但规范允许)
  • 推荐按 ; +key= 或正则匹配,避免前缀误判(如 nameusername
function getCookie(name) {
  const match = document.cookie.match(new RegExp(`(?:^|;)\\s*${name}=([^;]*)`));
  return match ? decodeURIComponent(match[1]) : undefined;
}

为什么不能直接删 Cookie?expires 设为过去时间才是删除

JavaScript 没有 document.cookie.remove() 这种方法。所谓“删除”,其实是覆盖写入一个已过期的同名 Cookie,让浏览器自动清理。

  • 必须保证 pathdomain 与原 Cookie 完全一致,否则旧 Cookie 仍存在
  • 常见错误:只设 expires,但没同步指定 path,导致删不掉
  • 安全起见,删除时建议显式带上 path=/(除非你明确知道原 Cookie 的 path)
function deleteCookie(name) {
  document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
}

现代项目中更推荐用 cookie-store API(Chrome 114+)

传统 document.cookie 操作繁琐、易出错、无 Promise、不支持 SameSite 等新属性。新版 cookie-store API 提供了结构化读写能力,但目前仅 Chromium 系主流支持。

  • 写入:navigator.cookieStore.set({ name: "theme", value: "dark", expires: Date.now() + 86400000 })
  • 读取:navigator.cookieStore.get("theme") 返回 Promise
  • 监听变更:navigator.cookieStore.addEventListener("change", ...)
  • 注意:仍需服务端配合启用 Permissions-Policy: cookie-store=() 才能使用

兼容性差仍是硬伤,生产环境仍需 fallback 到 document.cookie 手动实现。

真正麻烦的不是语法,而是 path/domain/expires 三者必须完全匹配才能覆盖或删除;漏掉任意一个,就等于在写一条新 Cookie。


# javascript  # java  # js  # cookie  # 编码  # 浏览器  # ai  # 键值对  # 为什么 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android自定义控件实现温度旋转按钮效果  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  微信小程序 scroll-view组件实现列表页实例代码  焦点电影公司作品,电影焦点结局是什么?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel怎么在Controller之外的地方验证数据  详解Android中Activity的四大启动模式实验简述  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel Docker环境搭建教程_Laravel Sail使用指南  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  无锡营销型网站制作公司,无锡网选车牌流程?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何在阿里云购买域名并搭建网站?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  音乐网站服务器如何优化API响应速度?  JS中对数组元素进行增删改移的方法总结  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  php结合redis实现高并发下的抢购、秒杀功能的实例  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何挑选优质建站一级代理提升网站排名?  Laravel如何自定义分页视图?(Pagination示例)  Laravel如何使用Livewire构建动态组件?(入门代码)  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Android okhttputils现在进度显示实例代码  如何快速生成高效建站系统源代码?  教学论文网站制作软件有哪些,写论文用什么软件 ?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  网站页面设计需要考虑到这些问题  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Python文本处理实践_日志清洗解析【指导】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复