讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

JavaScript中如何操作Cookie_Cookie安全性你注意了吗

浅晨姑娘_7636

浅晨姑娘_7636

发布时间:2026-01-01 19:21:10

|

805人浏览过

|

来源于php中文网

原创

document.cookie 受同源策略和 Cookie 属性双重限制:无法跨域读取、HttpOnly Cookie 不可被 JS 读取;Secure Cookie 在 HTTP 页面中设置会被丢弃;SameSite 影响跨站发送;写入不支持删除或修改属性,读取需手动解析。

javascript中如何操作cookie_cookie安全性你注意了吗

直接读写 document.cookie 有啥限制?

浏览器对 document.cookie 的读写是受同源策略和 Cookie 属性双重约束的。你不能跨域读取其他站点的 Cookie,也不能通过 JS 读取设置了 HttpOnly 标志的 Cookie —— 这类 Cookie 只能由服务端在响应头中设置、由浏览器自动携带,JS 调用 document.cookie 时完全看不见它。

写入时也受限:如果当前页面协议是 http://,却尝试设置 Secure 属性,该 Cookie 会被浏览器静默丢弃;同样,SameSite=Strict 或 SameSite=Lax 在某些跨站请求场景下会阻止发送。

  • document.cookie = "a=1" 只会新增或覆盖同名 Cookie,无法删除或修改已有属性(如过期时间、路径)
  • 读取 document.cookie 返回的是字符串,格式为 "a=1; b=2; c=3",需手动解析,没有内置 API 解析
  • 所有写入操作都必须拼接完整属性字符串,漏掉 Path=/ 可能导致后续读不到(默认路径是当前路径,不是根路径)

如何安全地封装一个 Cookie 操作函数?

原生操作太脆弱,建议封装最小可用的 setCookie 和 getCookie,重点处理编码、路径、作用域和安全属性:

function setCookie(name, value, options = {}) {
  const { expires, path = '/', domain, secure, sameSite = 'Lax', httpOnly } = options;
  let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
  if (expires instanceof Date) cookieStr += `; Expires=${expires.toUTCString()}`;
  if (path) cookieStr += `; Path=${path}`;
  if (domain) cookieStr += `; Domain=${domain}`;
  if (secure) cookieStr += '; Secure';
  if (sameSite) cookieStr += `; SameSite=${sameSite}`;
  // 注意:httpOnly 是响应头字段,JS 无法设置,这里仅作提醒,不参与拼接
  document.cookie = cookieStr;
}
<p>function getCookie(name) {
const cookies = document.cookie.split('; ').reduce((acc, pair) => {
const [k, v] = pair.split('=');
acc[decodeURIComponent(k)] = decodeURIComponent(v);
return acc;
}, {});
return cookies[name];
}

关键点:

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

JavaScript 测试模式
JavaScript 测试模式

使用 Jest、Vitest 和 Testing Library 实施全面的测试策略,包括单元测试、集成测试和端到端测试,涵盖模拟、测试夹具和测试驱动开发。在编

下载
  • 始终对 name 和 value 做 encodeURIComponent,否则含空格、分号、等号会破坏格式
  • Path=/ 必须显式指定,否则默认是当前 URL 路径(比如 /admin/user),导致首页读不到
  • SameSite=Lax 是当前推荐值,能兼顾 CSRF 防护与大部分正常跳转场景;Strict 过于严格,用户从外部链接进站时可能丢失登录态

Secure 和 HttpOnly 到底谁管什么?

这两个属性常被混淆,但职责完全不同:

  • Secure:只允许 Cookie 通过 HTTPS 协议传输。JS 写入时若当前是 HTTP 页面,加了 Secure 会被忽略;服务端 Set-Cookie 响应头中加了,则浏览器只在 HTTPS 请求中带上它
  • HttpOnly:纯服务端控制字段,JS 完全无法访问。它防的是 XSS 后的 Cookie 窃取,比如攻击者注入 <script>alert(document.cookie)</script>,有 HttpOnly 的 Cookie 就不会出现在 document.cookie 字符串里
  • 二者可共存:Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Lax

注意:前端 JS 设置 Cookie 时,HttpOnly 字段会被浏览器直接忽略——它只能由服务端在响应头中声明。

为什么你设的 Cookie 明明写了 Expires 却还是会话级?

常见错误是把时间戳当日期对象传给 Expires:

  • ❌ 错误:expires: Date.now() + 24 * 60 * 60 * 1000(这是毫秒数,不是 Date 对象)
  • ✅ 正确:expires: new Date(Date.now() + 24 * 60 * 60 * 1000)
  • 更稳妥写法是用 Max-Age(单位秒),它比 Expires 更可靠,不受客户端时间偏差影响,但 JS 无法通过 document.cookie 设置 Max-Age,只能靠服务端响应头

另一个坑:Chrome 94+ 对第三方 Cookie 加强限制,默认开启 SameSite=Lax,如果你的 Cookie 是嵌在 iframe 或跨站表单提交中使用的,很可能根本发不出去——这时得确认是否真需要跨站共享,否则优先改用后端透传或 Storage API 配合 postMessage。

真正容易被忽略的,是开发环境混用 localhost 和 127.0.0.1:它们被视为不同域名,带 Domain 属性的 Cookie 在其中一个下设了,在另一个下就读不到。调试时统一用 localhost,别来回切。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
chrome什么意思
chrome什么意思

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

2986

2023.08.11

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

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

6239

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

4487

2026.03.24

cookie
cookie

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

12939

2023.06.30

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

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

1346

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

884

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1986

2025.08.19

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1938

2023.08.03

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn