Cookie 的工作原理
HTTP 是无状态的,因此每次请求开始时,都不会自动记住之前的请求。服务器通常通过 Set-Cookie 响应标头创建 Cookie。浏览器将其保存,并在域、路径、安全属性和 SameSite 规则匹配时,通过 Cookie 请求标头将其发回。
HTTP/1.1 200 OK
Set-Cookie: session_id=a1b2c3; Path=/; Secure; HttpOnly; SameSite=Lax
GET /account HTTP/1.1
Host: example.com
Cookie: session_id=a1b2c3
Cookie 值可以保存偏好设置;用于登录时,更常见的是保存不透明的会话 ID,由该 ID 指向服务器端数据。Cookie 包含在请求的 HTTP 标头中;它不是程序,本身无法执行代码。
常见 Cookie 类型
| 类型 | 定义依据 | 常见用途 |
|---|---|---|
| 会话 Cookie | 没有固定的过期时间 | 保存登录或购物车状态 |
| 持久 Cookie | Expires 或 Max-Age |
记住设置 |
| 第一方 Cookie | 当前访问的网站 | 网站功能和分析 |
| 第三方 Cookie | 页面中的其他网站 | 跨站服务或跟踪 |
会话 Cookie 和持久 Cookie 区分的是生命周期,第一方 Cookie 和第三方 Cookie 区分的是 Cookie 与当前网站的关系,因此同一个 Cookie 可以既是持久 Cookie,也是第一方 Cookie。
Cookie 与代理
代理会改变网站看到的 IP 地址,但不会自动清除或替换 Cookie。如果轮换 IP 时复用同一个 Cookie 容器,网站仍可将这些请求关联到同一个会话。对于登录后的一连串操作,将 Cookie 容器与粘性会话配合使用,通常比在各步骤之间更换 IP 更能保持状态一致。
网站可能结合 Cookie、请求频率、IP 历史记录和浏览器指纹识别来判断访问者。清除 Cookie 不会消除其他信号,更换 IP 也不会创建完全独立的浏览器身份。
安全处理 Cookie
- 隔离会话。 为每个用户、账号或独立任务分别使用 Cookie 容器。
- 保护认证 Cookie。 不要记录、公开或分享会话值,否则他人可能据此访问账号。
- 让相关请求保持同一状态。 在购物车、登录和多页面工作流中保留所需的 Cookie。
- 遵守网站限制。 不要通过重置 Cookie 绕过访问控制、限速或服务条款。
常见问题
更换代理会清除 Cookie 吗?
不会。Cookie 会保留在浏览器或 HTTP 客户端的 Cookie 容器中,直至过期或被手动删除。即使更换了代理 IP,仍可能发送相同的 Cookie 值。
网页采集工具应该保留 Cookie 吗?
这取决于工作流。需要共享状态的相关页面应保留 Cookie;独立任务应使用不同的 Cookie 容器,也不要在不同账号之间复用认证 Cookie。
Cookie 和浏览器指纹一样吗?
不一样。Cookie 是存储在客户端并发回网站的数据。浏览器指纹则根据屏幕设置、字体和浏览器行为等特征推断得出,因此删除 Cookie 后,浏览器指纹仍可能存在。