0

0

怎样使用Javascript创建和操作Cookie与Web Storage?

紅蓮之龍

紅蓮之龍

发布时间:2026-01-08 19:36:10

|

968人浏览过

|

来源于php中文网

原创

直接用 document.cookie 写 Cookie 易出错,因其是伪属性,读取返回所有 Cookie 字符串,赋值仅追加或覆盖单条且需手动拼接属性;推荐封装 setCookie 函数统一处理。

怎样使用javascript创建和操作cookie与web storage?

直接用 document.cookie 写 Cookie 很容易出错

浏览器原生写 Cookie 不像 localStorage.setItem() 那样直观,document.cookie 是一个“伪属性”:读取时返回所有可访问 Cookie 的字符串(分号分隔),赋值时却只是追加或覆盖某一条——而且必须手动拼接键值对和所有属性(expirespathdomainSecureHttpOnly 等)。

常见错误包括:

  • 漏写 expiresmax-age → 变成会话 Cookie,关浏览器就丢
  • 路径写成 /user 却在 /user/profile 页读不到 → 实际需确保 path=/user/ 或更宽泛的 path=/
  • 前端设了 Secure 但本地开发用 http://localhost → Cookie 直接被忽略(不报错)
  • 误以为 document.cookie = "a=1; b=2" 能一次设两个 → 实际只设了 a=1; b=2 这个键名,值是空字符串

推荐封装一个基础函数:

function setCookie(name, value, options = {}) {
  const { expires, path = '/', domain, secure, sameSite = 'Lax' } = options;
  let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
  if (expires instanceof Date) {
    cookieStr += `; expires=${expires.toUTCString()}`;
  } else if (typeof expires === 'number') {
    cookieStr += `; max-age=${expires}`;
  }
  if (path) cookieStr += `; path=${path}`;
  if (domain) cookieStr += `; domain=${domain}`;
  if (secure) cookieStr += '; Secure';
  if (sameSite) cookieStr += `; SameSite=${sameSite}`;
  document.cookie = cookieStr;
}

localStoragesessionStorage 的核心区别在生命周期和作用域

两者 API 完全一致(setItem()getItem()removeItem()clear()),但行为差异直接影响选型:

立即学习Java免费学习笔记(深入)”;

  • localStorage:持久化存储,除非手动清除或代码调用 clear(),否则一直存在;同源(协议+域名+端口)下所有页面共享
  • sessionStorage:仅当前 tab / window 生命周期有效,关闭标签页即清空;即使同源,新开 tab 也是独立的存储空间

典型使用场景:

AITDK
AITDK

免费AI SEO工具,SEO的AI生成器

下载
  • 用户偏好设置(主题、语言)→ localStorage
  • 表单草稿(避免刷新丢失)→ sessionStorage(关掉页面就不用保留)
  • 登录态 token(短时效)→ 更推荐 httpOnly Cookie,而非 Web Storage(防 XSS 泄露)

注意:localStoragesessionStorage 只能存字符串。存对象要先 JSON.stringify(),取出来再 JSON.parse() —— 否则会得到 [object Object]

Cookie 与 Web Storage 在安全性和容量上的硬约束

三者不是功能重叠的替代品,而是设计目标不同:

  • Cookie:最大约 4KB/条,每次 HTTP 请求自动携带(影响请求头大小),适合服务端需要的轻量状态(如 session id)。HttpOnly 标志能阻止 JS 访问,大幅降低 XSS 风险
  • localStorage:通常 5–10MB(浏览器而异),纯前端读写,无网络开销,但任何 XSS 脚本都能读取 → 绝对不要存敏感凭证
  • sessionStorage:容量同 localStorage,但作用域更窄,适合临时缓存,仍不防 XSS

关键限制:

  • Cookie 的 SameSite 默认值已变为 Lax(Chrome 80+),跨站 POST 请求不会带 Cookie,防止 CSRF;若需跨站携带,得显式设 SameSite=None; Secure
  • localStorage 在私密模式(如 Safari 无痕)下可能抛 QuotaExceededError,即使没存满 —— 需加 try/catch
  • 移动端 WebView(尤其 iOS)对 localStorage 的持久性不可靠,部分场景重启后丢失

调试时快速验证 Cookie 和 Storage 是否生效

别只信代码逻辑,动手查:

  • Chrome DevTools → Application 标签页 → 左侧选 Cookies 或 Storage → 点开对应域名,实时看键值和过期时间
  • 控制台直接运行:document.cookie(只显示当前路径可读的 Cookie)、localStorage.getItem('key')sessionStorage.length
  • 修改 Cookie 的 expires 后没生效?检查系统时间是否准确 —— 浏览器按本地时间判断过期,时间错乱会导致 Cookie 瞬间失效
  • 发现 localStorage 里有旧数据残留?可能是开发时改了 key 名但忘了清理,建议版本化 key(如 user_prefs_v2)并迁移逻辑

真正难的不是语法,而是根据数据敏感性、生命周期、传输需求、兼容场景,选对那个“刚好够用”的存储机制。写完记得删调试用的 console.log,尤其别把 localStorage 里的 token 打出来。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1059

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

841

2023.11.06

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6500

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

368

2023.11.23

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号