Cookie

140 阅读4分钟

起源

一位名叫 Lou Montulli 的程序员在为一家公司创建在线商店,因为在用户浏览商店时,存储每个用户的购物车数据会导致服务器负载过重,所以lu需要想出一种方法可以将每个用户的购物车数据存储在它们自己的计算机上,为公司节省服务器空间并节省成本。

他回想起了计算机科学中的  "magic cookie"  概念(一种在系统间传递的小型身份令牌或状态信息包)。它通过在服务器和计算机之间传递少量信息来识别某人何时登录系统,随后为网页浏览器重新创建了这个概念,于是现代cookie诞生了。

定义

是来自特定网站的一小段数据,它会在用户浏览网页时存储在用户的电脑上。

更准确地说:

Cookie 是 网站通过HTTP 响应头里的Set-Cookie (如Set-Cookie: session_id=abc123; Max-Age=3600; Secure), 发送并存储在用户浏览器中的小型文本片段,通常小于4KB。

浏览器自动保存Cookie到本地(内存/硬盘),数据通常以 键值对 (key=value) 的形式组织(如{ "user_token": "xyz", "cart_items": "5" })

当用户后续访问相同网站(遵循同源策略和域/路径属性)时,浏览器会自动将这些数据通过 HTTP 请求头 (Cookie) 去请求服务器。

作用传输

当用户再次访问同一个网站(或符合作用域规则的子域/路径)时,浏览器会自动查找与该网站关联的 Cookie,并将它们包含在 HTTP 请求的Cookie头部中发送给服务器。

例如下图,浏览器在请求百度时自动携带了名为 BAIDUID 的 Cookie。服务端获取到这个请求头后,就能解析出这个 Cookie 的值,从而识别用户或获取与该浏览器/用户关联的特定信息(如用户偏好、会话 ID 等)

image.png

同一个浏览器会共享cookie,而打开无痕模式就相当于创建了一个临时的、隔离的会话环境,这时会话 Cookie 仅在无痕窗口打开期间存在,关闭后会清掉所有Cookie

浏览器中每当用户向服务器发出请求时,会将相关的 Cookie 包含在请求头中发送到服务器,这就是为什么 Cookie 的容量被设计得要小得多(通常限制在 4KB 左右)—— 因为每次请求都可能携带它们

功能:

1.跟踪用户的浏览器活动,以便提供有针对性的信息,比如商品或服务的广告。

这就是为什么网站和软件会给你推荐你感兴趣的内容的原因,当网站询问你是否能接受cookie的弹窗里,开发者会告诉你他们使用cookie的用途(这是一种法律义务)

2.记住你在特定网站的登录信息

当你重新打开一个网站时,不用再次登录

3.允许网站所有者精确地跟踪他们的网站有多少独立访客

因为每个cookei都有自己唯一的id,所以如果用户一天访问同一个网站两三次,cookie就可以让我们将它算作一个独立访客,这样网站所有者就可以收集关于他们网站流量的更准确的数据

如何工作

当你访问一个在线商店,该网站会把一个cookie放在你的硬盘上,该cookie具有其自己的唯一标识码

--->

然后网站会使用此id来跟踪你的会话(指的是你从头到尾的访问过程)

为了跟踪你哪些商品加入了购物车或你查看了哪些商品,以便他们推荐类似商品,甚至可以为你保存优惠券代码,以便你返回该网站时能使用。

第三方cookie

cookie只特定于该网站,这意味着他们无法在完全不同的网站上跟踪你, 除非他们用另一种 cookie(第三方cookie)

例子:

你在浏览小红书xiaohongshu.com 的一篇帖子,页面包含“分享到微信”的按钮,你点击过后,

加载这个按钮是需要向微信域名 weixin.qq.com发起资源加载请求和接口调用请求

微信在响应中植入专属 Cookie,浏览器将其隔离存储在 weixin.qq.com 域下

这样,微信 (weixin.qq.com) 就知道你访问过哪篇小红书。微信可以利用这个信息,在其自己的平台(如微信新闻推送)上向你展示相关的或有针对性的广告。这就是跨站跟踪。

这类事情促使欧洲制定了gdpr,即通用数据保护条例,它允许用户选择不使用cookie,但是并不是所有cookie都会侵犯隐私,它们通常帮助你在网络上获得更愉快的用户体验,并为你节省大量的时间和精力