什么是 Cookie?网站如何记住你
Cookie 是一小段文本,网站请求你的浏览器存储它,并在之后每次访问该网站时发回。这就是网站“记住”你的方式:记住你已登录、购物车里有什么、你选择了哪种语言。Cookie 只是数据,不是程序,但由于它们可以识别你,因此对安全和隐私都很重要。
使用 AI 构建时,它为什么重要
Cookie 位于你向 AI 构建工具提出的多项功能底层,而你往往不会提到“cookie”这个词:
- 登录。 在大多数 Web 应用中,“保持登录”意味着会话 cookie。这个 cookie 的配置方式决定了它被窃取的难易程度。
- 购物车和偏好设置。 刷新页面后仍保留的购物篮,通常依赖 cookie 或浏览器存储。
- 分析和广告。 添加 Google Analytics、Meta 像素或聊天组件,通常会引入其他公司的 cookie。
- 法律提示。 在许多地区,某些 cookie 需要先征得访客同意,这就是 cookie 横幅的由来。
如果你了解应用会设置哪些 cookie 以及原因,就能在安全设置、同意机制和隐私政策上做出更好的选择。
一个日常类比
想象一张寄存存根。你把外套交给寄存处,拿到一张编号存根。存根本身不是外套,只是一个号码。每次回到柜台,你出示存根,管理员就知道哪件外套是你的。
会话 cookie 的工作方式与此相同。你登录时,服务器在自己那边保存你的信息,并给你的浏览器一张“存根”,也就是一个很长的随机 ID。你的浏览器在每次请求时都会出示这张存根,服务器据此查找你是谁。任何复制了这张存根的人都能取走你的外套,这就是登录 cookie 需要保护的原因。
Cookie 实际如何工作
- 你访问一个网站。服务器的响应包含类似
Set-Cookie: session_id=8f3k...; HttpOnly; Secure; SameSite=Lax的头部。 - 你的浏览器存储它,并与该网站的域名绑定。
- 之后每次访问同一网站的请求,浏览器都会自动添加
Cookie: session_id=8f3k...。 - 服务器读取它,并知道是你。
页面的 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,从而限制注入脚本造成的损害。 |
Secure | cookie 仅通过加密的 HTTPS 连接发送。 |
SameSite | 控制来自其他网站的请求是否携带该 cookie(Strict、Lax 或 None)。 |
Expires / Max-Age | cookie 应何时被删除。 |
| Domain / Path | 网站的哪些地址会接收该 cookie。 |
| localStorage | 页面代码可以读取的浏览器存储,但不会自动发送到服务器。 |
| XSS | 跨站脚本攻击:攻击者的脚本在你的页面中运行,可能试图窃取数据。 |
| CSRF | 跨站请求伪造:另一网站诱使浏览器带着你的 cookie 发送请求。 |
| Cookie 同意 | 在设置非必需 cookie 之前征求访客许可。 |
常见错误与误解
- “Cookie 是病毒。” 它们只是纯文本,不能在你的电脑上运行代码。
- 把敏感数据放进 cookie。 只存储随机 ID,并将详细信息保存在服务器上。
- 把登录令牌放在 localStorage 中。 页面上的任何脚本都能读取 localStorage,包括被注入的脚本。
HttpOnlycookie 则完全无法被页面脚本读取。 - 缺少
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 保留在浏览器中,只能由页面自身的代码读取,适合用于主题等偏好设置。