ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

System Design 101 图解 HTTP Cookie:从无状态协议到会话状态的秘密武器

System Design 101 图解 HTTP Cookie:从无状态协议到会话状态的秘密武器 后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载HTTP 是万维网的语言天生无状态服务器无法记住上一次请求你是谁而 Cookie 正是为这一缺陷补位的会话秘方——它让浏览器替用户保管一张写有身份与偏好信息的小纸条在后续每次请求中自动递给服务器从而支撑起登录态、购物车、个性化推荐等无缝的连续浏览体验。读完本文你将掌握 Cookie 的完整生命周期服务器下发、浏览器存储、随请求回传、浏览器为何是Cookie 守门人以及 SameSite、Secure、HttpOnly、Domain 等核心属性的取舍之道可直接用于日常 Web 开发与系统设计面试答题。为什么需要 CookieHTTP 的金鱼记忆HTTP 协议天然是stateless无状态的每一次请求都是独立的、孤立的协议层面不携带任何关于上一次交互的记忆。正如 http-cookies-explained-with-a-simple-diagram.md 开篇所描述的那样——HTTP 像一条金鱼瞬间就会把你忘记。但现代 Web 应用恰恰依赖连续体验登录后访问页面、往购物车加商品、保持语言偏好……这些场景都需要服务器在多次请求之间记住同一个用户。如果没有任何机制用户每点击一次页面都要重新登录体验将无法忍受。Cookie 正是为此而生它是会话秘方把无状态的 HTTP 请求串联成有状态的用户会话。Cookie 是什么写给服务器的小纸条可以把 Cookie 理解为你递给 Web 服务器的小纸条上面写着请记住我。 这张纸条由服务器生成、随响应下发最终**存储在浏览器客户端**一侧而不是服务器上。仓库中的姊妹篇 what-is-a-cookie.md 给出了一个更直观的比喻想象 Bob 第一次走进咖啡馆点了一杯中杯、加两份糖的浓缩咖啡。收银员把 Bob 的身份和口味偏好记在一张卡片上随咖啡一起交还给他。下次 Bob 再来只需出示这张卡片收银员立刻知道他是谁、喜欢什么。Cookie 就是这张偏好卡用户登录网站时服务器签发一小份数据作为 CookieCookie 存储在客户端下一次请求时浏览器自动带上 Cookie服务器看到 Cookie立刻识别用户身份与偏好无需再查数据库。这个免查库即识别的特性让 Cookie 在提升体验的同时也降低了服务端的查询压力。Cookie 的完整工作流程一次典型的 Cookie 会话包含以下步骤结合 whats-the-difference-between-session-based-authentication-and-jwts.md 中 Session 认证的流程梳理用户通过前端应用发起登录请求请求到达后端服务器后端校验凭据后创建会话Session把会话数据写入会话存储session store并生成唯一的 Session ID服务器在响应中通过Set-Cookie响应头把 Session ID 下发给浏览器浏览器收到后把该 Cookie 保存在本地用户发起下一次请求时浏览器自动在请求头Cookie中带上这个 Session ID服务器凭 Session ID 从会话存储中取回用户信息完成身份识别与授权。从协议层面看核心就两个头方向头部作用服务器 → 浏览器Set-Cookie指示浏览器保存一个 Cookie 及其属性浏览器 → 服务器Cookie携带此前保存的、符合发送条件的 Cookie一个典型的Set-Cookie响应头形如Set-Cookie: sessionIdabc123xyz; Path/; HttpOnly; Secure; SameSiteLax; Max-Age86400之后浏览器自动回传Cookie: sessionIdabc123xyz需要注意Cookie 默认随每个符合条件的后续请求自动发送详见 what-are-the-differences-between-cookies-and-sessions.md这意味着开发者无需手动管理传输逻辑但也要为此承担每次请求都携带的带宽与隐私成本。浏览器Cookie 的守门人为什么浏览器会被称作 Cookie 守门人cookie bouncer因为浏览器有一套严格的同源Same-Origin判定与发送规则防止你的 Cookie 被投递到错误的网站。浏览器不会把a.com的 Cookie 主动发送给b.com。Cookie 是否随请求发送由以下因素共同决定Domain 属性声明该 Cookie 归属哪个域名可含子域浏览器只把 Cookie 发送给匹配域名的请求Path 属性进一步限定 Cookie 只对该路径及其子路径生效Secure 属性要求 Cookie 仅在 HTTPS 连接下发送SameSite 属性控制跨站请求Cross-Site时是否携带 Cookie是近年防 CSRF跨站请求伪造的关键开关。这套守门机制确保了 A 网站设置的 Cookie 不会串台到 B 网站从协议层遏制了最基本的身份冒用风险。Cookie 的核心属性撑起 Cookie 罐的明星成员原文档点名的五位明星成员——SameSite、Name、Value、Secure、Domain外加实践中同样关键的HttpOnly、Path、Expires/Max-Age共同构成一份完整 Cookie 的全部规则属性作用说明与建议NameCookie 的名字与Value组成键值对同一域名下以NameValue整体识别ValueCookie 的值保存 Session ID、偏好标记等小份数据不要存放敏感明文Domain限定生效域名指定该 Cookie 属于哪个站点不指定时默认仅当前主机指定后子域也可共享Path限定生效路径默认/即全站生效可缩窄到/admin等特定目录以缩小暴露面Secure仅 HTTPS 传输保证 Cookie 不在明文 HTTP 中传输防中间人窃听生产环境应开启HttpOnly禁止 JS 读取使document.cookie无法访问该 Cookie从根源上缓解 XSS 窃取会话的风险会话类 Cookie 必须开启SameSite跨站发送策略取值Strict完全禁止跨站携带/Lax仅顶层导航等安全场景携带/None允许跨站携带须配SecureExpires/Max-Age有效期决定 Cookie 是会话级关浏览器即失效还是持久级存到指定过期时间Max-Age优先于ExpiresSameSite 详解SameSite是防 CSRF 的重要防线取值差异直接影响安全等级Strict最严格任何跨站请求都不携带 Cookie安全但可能影响从外链正常访问时的登录态Lax现代浏览器默认允许在用户点击链接、地址栏输入等顶层导航场景携带 Cookie平衡安全与体验None允许第三方场景携带必须同时设置SecureHTTPS常用于跨站单点登录等场景也是第三方 Cookie 争议的焦点。HttpOnly 与 XSS 的关系HttpOnly是防御 XSS跨站脚本攻击偷取会话的关键属性。攻击者即使注入了脚本也无法通过document.cookie读取标记了HttpOnly的会话 Cookie从而无法冒充用户身份。因此承载 Session ID 的 Cookie 应当始终开启HttpOnly。有效期与第三方 Cookie会话级 Cookie无Expires/Max-Age存在内存中浏览器关闭即清除持久级 Cookie 存到磁盘按过期时间存活在现代浏览器中第三方 Cookie由当前页面之外的其他域名设置的 Cookie越来越多地被默认拦截这直接影响广告追踪、跨站登录等场景是系统设计时需要纳入考量的环境约束。从 Cookie 到会话Cookie 与 Session 的分工Cookie 常与 Session 成对出现二者是分工合作的关系详见 what-are-the-differences-between-cookies-and-sessions.md 与 cookies-vs-sessions-vs-jwt-vs-paseto.md维度CookieSession存储位置客户端浏览器服务端会话存储 / 数据库数据容量通常有 4KB 左右的体积限制只适合小份数据可承载更大体量的数据传输方式随每个后续请求自动发送由 Cookie 携带的 Session ID 引用数据不直接传输安全性数据暴露在客户端可被用户查看/篡改数据不直接暴露给客户端相对更安全控制权用户可在浏览器中禁用 Cookie服务端可精确控制会话生命周期扩展性——在分布式系统中会话存储需要同步或集中化面临扩展挑战关键结论Cookie 负责携带凭证Session 负责保存数据。服务端把大数据量的用户状态放进 Session只在 Cookie 里放一个轻量 Session ID既绕开了 Cookie 的体积限制又避免敏感数据直接暴露给客户端。Cookie 在认证体系中的位置与 JWT、Token 的对比在用户身份管理演进谱系中Cookie 是基础而重要的角色可参考 token-cookie-session.md 与 session-cookie-jwt-token-sso-and-oauth-2.mdWWW-Authenticate最原始的账号密码认证无法控制登录生命周期如今已很少使用Session-Cookie服务端维护会话存储、浏览器保存 Session ID 的方案对登录生命周期有精细控制但 Cookie 天然只适合浏览器场景对移动 App 不友好Token把身份信息编码进令牌、由客户端保存并回传解决跨端兼容问题但需要加解密有一定开销JWT将令牌标准化利用数字签名保证可信签名内嵌于令牌本身服务端无需保存会话详见 whats-the-difference-between-session-based-authentication-and-jwts.mdSSO / OAuth 2.0在 Cookie 与 Token 之上构建跨站点身份联合与授权体系。对比要点依据 cookies-vs-sessions-vs-jwt-vs-paseto.mdSession Cookie服务端对数据有强控制权但分布式系统中会话存储扩展较困难JWT无状态、自包含、天然可扩展但需要防范令牌被盗并妥善管理过期时间PASETO作为 JWT 的改进方案强制更强的密码学默认配置从设计上消除算法混淆类漏洞。值得注意的是JWT 最终也常常通过 Cookie 方式下发给浏览器见 whats-the-difference-between-session-based-authentication-and-jwts.md 所述cookie approach。也就是说无论底层是 Session 还是 JWTCookie 都是浏览器端承载凭证的标准载体——这也解释了为什么理解 Cookie 是理解整个认证体系的前提。安全实践清单综合上述机制生产环境下的 Cookie 配置应遵循以下基线会话凭证 Cookie 必须设置HttpOnly阻断 XSS 窃取必须设置Secure只允许 HTTPS 传输SameSite至少设置为Lax非必要不放开到None使用Domain与Path将 Cookie 作用域收窄到最小必要范围敏感信息不写入 CookieValue只存放 Session ID 这类引用型凭证为持久 Cookie 设置合理的Max-Age避免长期滞留客户端在分布式架构中若采用 Session 方案需为会话存储设计集中化或共享方案并警惕扩展瓶颈。小结Cookie 以客户端小纸条的形态为无状态的 HTTP 注入了会话能力浏览器则以同源规则充当守门人控制 Cookie 的发送边界而Name/Value、Domain、Path、Secure、HttpOnly、SameSite、Expires/Max-Age这些属性共同定义了 Cookie 的存取规则与安全边界。理解 Cookie 的机制是理解 Session、JWT、SSO、OAuth 2.0 等整个身份认证演进体系的基础——无论你在做 Web 开发还是备战系统设计面试这都是必须掌握的第一块拼图。如需继续深入可在本仓库中按序阅读 what-is-a-cookie.mdCookie 的基本概念、what-are-the-differences-between-cookies-and-sessions.mdCookie 与 Session 对比、cookies-vs-sessions-vs-jwt-vs-paseto.md四种认证方案对比与 session-cookie-jwt-token-sso-and-oauth-2.md身份管理演进全景。赞分享后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载相关推荐system-design-101 之 JWT 101无状态认证的核心密钥system design 101 之 JWT 101无状态认证的核心密钥 JWTJSON Web Token是用于在双方之间安全传输信息的开放标准也是后端文档教程FuzzySharp核心功能解析7种字符串相似度算法对比与实战FuzzySharp核心功能解析7种字符串相似度算法对比与实战 FuzzySharp是C .NET平台上的模糊字符串匹配库基于著名的Python Fuzzy后端libsignal协议状态机会话状态的持久化与恢复libsignal协议状态机会话状态的持久化与恢复 概述 在Signal的端到端加密通信中会话状态管理是确保消息安全传输的核心机制。libsignal协议通上一篇别再收藏教程了一份免费、可验证的英语学习指南12 周建立自己的训练系统下一篇彻底掌握.NET Core异步编程Task模式实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表