HTTP cookie

Cookie 是一个由 Web 服务器 发送到 用户浏览器 的小数据片段。浏览器可以存储这个数据、修改它,并在后续的请求中将其返回给服务器。Cookie 主要用于在 HTTP 请求之间 保持信息,允许 Web 应用程序记住一些状态信息,如 用户偏好登录状态页面跟踪信息

由于 HTTP 协议是无状态的,每个请求都是独立的,服务器无法记住前一个请求的状态。Cookie 解决了这个问题,它使得服务器能够在不同的请求之间保持状态。


下面是一个简单的用户登录流程,展示了 Cookie 的基本使用场景:

  1. 用户登录 :用户通过提交登录表单将 用户名和密码 发送到服务器。
  2. 服务器验证 :如果登录凭证正确,服务器会响应一个 Cookie,其中包含一个 会话 ID,该 ID 记录了用户的登录状态。这时用户就会被认为是已登录状态。
  3. 后续请求 :当用户访问网站的其他页面时,浏览器会自动将包含 会话 ID 的 Cookie 一并发送到服务器,表明用户仍然保持登录状态。
  4. 服务器验证会话:服务器检查该会话 ID 是否有效。如果有效,服务器会返回个性化的页面(如欢迎信息);如果无效,服务器会删除该 Cookie,并返回一个通用页面,或者要求用户重新登录。

在现代 Web 开发中,Cookie 的使用已经有所减少,特别是在存储敏感数据、处理跨设备数据同步等方面,很多开发者都倾向于使用更加安全和高效的技术(如 LocalStorage、SessionStorage、JWT、服务器端会话等),但 Cookie 依然在一些场景中扮演着重要角色。

身份验证和会话管理

Cookie 主要用来存储 会话 ID,这是 Web 应用程序中最常见的用途之一。用户登录时,服务器通常会生成一个会话 ID,并将其作为 Cookie 存储在客户端。这个会话 ID 在该网站后续的请求中自动发送回服务器,帮助服务器识别用户身份,进行身份验证。

用户偏好和设置

Cookie 常常用于存储用户的偏好设置、语言选择、主题样式等。这些信息不涉及敏感数据,但可以提供个性化体验。

跟踪和分析(Tracking & Analytics)

Cookie 被广泛用于 Web 分析和广告跟踪,帮助网站了解用户的浏览行为和兴趣。工具如 Google Analytics、Facebook Pixel、广告追踪等都会使用 Cookie 来跟踪用户活动,生成报告和数据分析。


Cookie的持久化

Cookie 的持久化存储依赖于 expires 或 max-age 属性,如果不设置这些属性,Cookie 将是临时的,即在浏览器关闭时会被自动删除。

expires

  • expires 属性定义了 Cookie 的过期时间,设置为一个具体的日期和时间。过期后,浏览器会自动删除该 Cookie。

max-age

  • max-age 属性定义了从 Cookie 设置时起,Cookie 的有效期(以秒为单位)。如果设置了 max-age,则 expires 属性会被忽略。max-age 是相对的,而不是绝对的时间。

浏览器关闭时的行为

  • 如果没有设置 expires 或 max-age,Cookie 是 临时的,只会在当前浏览器会话中有效,浏览器关闭时 Cookie 会被删除。这种类型的 Cookie 被称为 会话 Cookie。
  • 如果设置了 expires 或 max-age,则 Cookie 会持久化,浏览器关闭后依然存在,直到过期。

特性 Cookie LocalStorage SessionStorage
存储大小 4KB 5MB 或更多 5MB 或更多
数据存储位置 存储在浏览器端并随请求发送给服务器 存储在浏览器端,不随请求发送 存储在浏览器端,仅限当前会话或标签页
生存周期 会话 Cookie(浏览器关闭时删除)持久化 Cookie(通过 expiresmax-age 持久存储,除非手动删除或清除缓存 会话结束时(关闭浏览器/标签页时)删除
安全性 可以设置 SecureHttpOnly 属性,减少 XSS 风险 没有自动安全限制,需要防范 XSS 攻击 与 LocalStorage 相似,易受 XSS 攻击
自动发送到服务器 ,每次请求会携带相关的 Cookie 信息 ,只在客户端存储,不与服务器交互 ,只在客户端存储,不与服务器交互
使用场景 用户身份认证、跟踪、会话管理、广告追踪等 存储用户偏好、长期配置、离线数据等 临时存储表单数据、当前会话状态等

Cookie 在 Web 开发中非常常见,但它们也涉及到一定的安全性问题 。不当使用或未加保护的 Cookie 可能成为黑客攻击的目标,导致数据泄露会话劫持。以下是一些常见的 Cookie 安全性防护措施:

  • HttpOnly:防止 JavaScript 访问 Cookie,减少 XSS 风险。
  • Secure:确保 Cookie 只通过 HTTPS 协议传输,避免被中间人攻击窃取。
  • SameSite:限制跨站请求携带 Cookie,防止 CSRF 攻击。
  • 合理的会话过期:设置合理的 Cookie 过期时间,避免长时间有效的会话。

参考

Using HTTP cookies - HTTP | MDN

相关推荐
岸边的风2 小时前
无需公网IP的文件交互:FileCodeBox容器化部署技术解析
网络·网络协议·tcp/ip
Zonda要好好学习3 小时前
Python入门Day4
java·网络·python
2501_915374353 小时前
UDP vs TCP:核心差异与应用场景全解析
网络协议·tcp/ip·udp
Edingbrugh.南空3 小时前
操作系统级TCP性能优化:高并发场景下的内核参数调优实践
网络协议·tcp/ip·性能优化
riverz12273 小时前
TCP backlog工作机制
服务器·网络·tcp/ip
yqcoder4 小时前
1. http 有哪些版本,你是用的哪个版本,怎么查看
网络·网络协议·http
Fanmeang7 小时前
OSPF路由过滤
运维·网络·华为·ip·路由·ospf·路由过滤
2501_915918418 小时前
接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南
websocket·网络协议·tcp/ip·http·网络安全·https·udp
我是阿呆同学8 小时前
仿mudou库one thread oneloop式并发服务器
网络
是阿建吖!8 小时前
【Linux | 网络】网络编程套接字
linux·网络