指南

什么是 Cookie?网站如何记住你

Cookie 是一小段文本,网站请求你的浏览器存储它,并在之后每次访问该网站时发回。这就是网站“记住”你的方式:记住你已登录、购物车里有什么、你选择了哪种语言。Cookie 只是数据,不是程序,但由于它们可以识别你,因此对安全和隐私都很重要。

使用 AI 构建时,它为什么重要

Cookie 位于你向 AI 构建工具提出的多项功能底层,而你往往不会提到“cookie”这个词:

  • 登录。 在大多数 Web 应用中,“保持登录”意味着会话 cookie。这个 cookie 的配置方式决定了它被窃取的难易程度。
  • 购物车和偏好设置。 刷新页面后仍保留的购物篮,通常依赖 cookie 或浏览器存储。
  • 分析和广告。 添加 Google Analytics、Meta 像素或聊天组件,通常会引入其他公司的 cookie。
  • 法律提示。 在许多地区,某些 cookie 需要先征得访客同意,这就是 cookie 横幅的由来。

如果你了解应用会设置哪些 cookie 以及原因,就能在安全设置、同意机制和隐私政策上做出更好的选择。

一个日常类比

想象一张寄存存根。你把外套交给寄存处,拿到一张编号存根。存根本身不是外套,只是一个号码。每次回到柜台,你出示存根,管理员就知道哪件外套是你的。

会话 cookie 的工作方式与此相同。你登录时,服务器在自己那边保存你的信息,并给你的浏览器一张“存根”,也就是一个很长的随机 ID。你的浏览器在每次请求时都会出示这张存根,服务器据此查找你是谁。任何复制了这张存根的人都能取走你的外套,这就是登录 cookie 需要保护的原因。

Cookie 实际如何工作

  1. 你访问一个网站。服务器的响应包含类似 Set-Cookie: session_id=8f3k...; HttpOnly; Secure; SameSite=Lax 的头部。
  2. 你的浏览器存储它,并与该网站的域名绑定。
  3. 之后每次访问同一网站的请求,浏览器都会自动添加 Cookie: session_id=8f3k...。
  4. 服务器读取它,并知道是你。

页面的 JavaScript 也可以创建 cookie,但最重要的 cookie(例如登录会话)应当由服务器设置,并对 JavaScript 隐藏。

各类 cookie

类型含义示例
会话 cookie没有过期时间;浏览器会话结束时删除一个短期的结账步骤
持久 cookie有过期时间(Expires 或 Max-Age),重启后仍保留“记住我 30 天”
第一方由地址栏中的网站设置你在该网站上的登录状态
第三方由页面中嵌入的其他域名设置广告网络的追踪 ID
严格必需为用户所要求的服务而必需登录会话、购物车
非必需对网站所有者有好处,但并非必要分析、广告、A/B 测试

浏览器已逐步限制第三方 cookie,因为它们被用来在不同网站之间追踪人。目前多款主流浏览器已默认屏蔽其中许多,而且细节仍在变化,因此不要把重要功能建立在第三方 cookie 之上。

实例:一家小型网店

假设你做了一个销售手工蜡烛的网店。下面是一个合理的版本会设置的 cookie,以及原因。

session:当店主或顾客登录时设置。它只包含一个随机 ID,真正的会话数据保存在服务器上。设置包括:HttpOnly(页面脚本无法读取)、Secure(仅通过 HTTPS 发送)、SameSite=Lax(在大多数由其他网站发起的请求中不会发送)。属于严格必需。

cart_id:让未登录的访客保留购物车。它指向保存在数据库中的购物车。属于严格必需,因为访客主动要求把商品加入购物车。

theme:记住深色模式。它可以是 cookie,但不需要发送到服务器,因此使用浏览器的 localStorage 更简单。

分析 cookie:如果你安装了分析工具,就会添加。它们属于非必需。在欧盟和英国,它们通常需要先获得同意才能设置,因此分析脚本应等到访客点击“接受”后再加载。

请注意,这家网店并没有把以下内容存进 cookie:顾客的姓名、地址或银行卡信息。Cookie 会随每次请求发送,并保存在用户设备上,因此应只保存 ID,而不是个人数据。

常用术语解释

术语含义
Cookie浏览器存储并发回网站的一个小型名称-值对。
Set-Cookie服务器用来创建或更新 cookie 的响应头。
会话(Session)服务器上关于已登录用户的记录,与 cookie 中的 ID 相关联。
HttpOnly阻止页面 JavaScript 读取 cookie,从而限制注入脚本造成的损害。
Securecookie 仅通过加密的 HTTPS 连接发送。
SameSite控制来自其他网站的请求是否携带该 cookie(Strict、Lax 或 None)。
Expires / Max-Agecookie 应何时被删除。
Domain / Path网站的哪些地址会接收该 cookie。
localStorage页面代码可以读取的浏览器存储,但不会自动发送到服务器。
XSS跨站脚本攻击:攻击者的脚本在你的页面中运行,可能试图窃取数据。
CSRF跨站请求伪造:另一网站诱使浏览器带着你的 cookie 发送请求。
Cookie 同意在设置非必需 cookie 之前征求访客许可。

常见错误与误解

  • “Cookie 是病毒。” 它们只是纯文本,不能在你的电脑上运行代码。
  • 把敏感数据放进 cookie。 只存储随机 ID,并将详细信息保存在服务器上。
  • 把登录令牌放在 localStorage 中。 页面上的任何脚本都能读取 localStorage,包括被注入的脚本。HttpOnly cookie 则完全无法被页面脚本读取。
  • 缺少 Secure 和 HttpOnly。 这两个标志几乎没有成本,却能堵住常见漏洞。
  • 以为横幅就涵盖了一切。 如果横幅在有人点击“接受”之前就加载了分析脚本,那它就没有起到应有的作用。
  • 忘记退出登录。 退出登录应当同时删除 cookie 并在服务器上结束会话,这样被复制的 cookie 就会失效。
  • “如果我不用 cookie,隐私规则就不适用。” GDPR 等规则涵盖的是个人数据,无论它存储在哪里,包括本地存储、设备指纹和服务器日志。

向 AI 构建工具提出什么要求

  • “列出应用设置的每一个 cookie,说明其用途、有效期,以及是否为严格必需。”
  • “登录会话使用 HttpOnly、Secure、SameSite=Lax 的 cookie。不要把认证令牌放在 localStorage 中。”
  • “cookie 中只保存随机会话 ID,会话数据存储在服务器上。”
  • “退出登录时,清除 cookie,并在服务器上使会话失效。”
  • “在访客接受之前,不要加载分析或营销脚本,并记住他们的选择。”
  • “在隐私政策中添加一段简单的 cookie 说明,与上面的列表保持一致。”

关于同意部分,请参阅如何添加 cookie 同意。关于 cookie 如何与登录配合,请阅读什么是身份认证。

Mythex 中的 cookie

Mythex 不为你应用的用户提供内置登录,因此你应用设置的 cookie 来自其自身代码,以及你添加的工具,例如你所选认证方式产生的会话 cookie。你可以在聊天中让智能体列出它们、收紧其设置,或添加同意横幅,并在发布前于实时预览中检查结果。文档中关于为应用添加登录的配方是很好的起始提示,为你构建的应用做安全防护则说明了如何让密钥和机密远离浏览器。

常见问题

网站上的 cookie 是什么?

Cookie 是网站请求浏览器存储的一小段文本。之后每次访问该网站时,浏览器都会把它随请求一起发回,从而让网站记住一些信息,例如你是否已登录,或购物车里有什么。

Cookie 危险吗?

Cookie 只是数据,不是程序,因此不能运行代码,也不会感染电脑。需要关注的是隐私问题(第三方 cookie 会在不同网站之间追踪你),以及安全问题(登录 cookie 被盗后可能被用来冒充你)。

第一方 cookie 和第三方 cookie 有什么区别?

第一方 cookie 由你地址栏中的网站设置,例如登录 cookie。第三方 cookie 由页面中嵌入的其他域名设置,例如广告网络,常用于在许多网站之间追踪你。

我需要 cookie 横幅吗?

取决于你的用户所在地区以及你使用的 cookie。在欧盟和英国,分析或广告等非必要 cookie 通常需要先获得同意;而仅为服务正常运行所必需的 cookie(例如登录会话)通常不需要。请查看适用于你的规则。

cookie 和 localStorage 有什么区别?

两者都在浏览器中存储数据。Cookie 会在每次请求时自动发送到服务器,因此适合用于登录。localStorage 保留在浏览器中,只能由页面自身的代码读取,适合用于主题等偏好设置。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)