Cookie
一、什么是 Cookie
Cookie 是遵循 HTTP 协议规范,由服务端通过 Set-Cookie 响应头下发,存储在客户端浏览器的小型文本键值对数据。
浏览器具备域名隔离机制,访问同源网站时,会自动携带对应域名下的 Cookie 传给服务端,且单个 Cookie 大小通常限制在 4KB 以内。
二、Cookie 为什么会诞生(核心本质)
HTTP 协议是无状态协议:服务器无法识别每次请求的客户端身份,默认认为所有请求都是独立、全新的,不会记录用户的历史访问状态。
为了解决HTTP无状态导致的用户会话丢失问题,实现服务端识别重复用户、记录用户登录状态、保存用户浏览偏好等需求,Cookie 应运而生,是最早期的 Web 会话解决方案。
三、Cookie 的核心作用
-
维持会话登录态(核心用途) 存储 SessionId、用户唯一标识,让用户一次登录后,多次请求无需重复登录,实现网站免登效果,也是单点登录早期核心基础。
-
缓存用户个性化配置 记录用户的浏览偏好,例如网页主题、语言、字体大小、页面排序规则等,优化用户体验。
-
用户行为统计溯源 记录访客浏览记录、访问时长、页面点击行为,用于网站流量统计、用户画像、内容推荐。
-
实现长期免登策略 通过设置 Cookie 过期时间,实现“记住我”“七天免登录”等业务功能。
四、Cookie 优缺点
1. 优点
-
原生支持、兼容性极强:所有浏览器原生适配,无需额外插件,是通用的 Web 标准。
-
服务端可控性高:由服务端下发、可自定义过期时间、域名、路径、安全属性。
-
自动携带、无需手动传参:同源请求浏览器自动挂载 Cookie,简化前后端交互逻辑。
-
占用资源极低:数据体量小,几乎不会占用客户端和服务器性能。
2. 缺点
-
容量限制小:单条 Cookie 最大 4KB,单个域名下 Cookie 数量有限,无法存储大量数据。
-
存在安全漏洞:默认可被 JS 获取,易遭受 XSS 攻击;同时容易引发 CSRF 跨站请求伪造。
-
跨域限制严格:遵循同源策略,无法跨域名共享,不利于多子系统单点登录拓展。
-
用户可控删除:存储在客户端,用户可手动清空浏览器 Cookie,导致登录态丢失。
-
每次请求冗余传输:同源所有请求(静态资源、接口请求)都会自动携带,轻微增加网络请求开销。
📌 总结
因为HTTP协议无状态,服务器无法记录用户访问状态,所以诞生了Cookie。Cookie是服务端下发、浏览器本地存储的小型文本数据,同源请求自动携带。主要用于维持用户登录会话、保存用户个性化配置、统计用户行为。它兼容性好、使用简单,但存在容量小、跨域困难、易发生XSS、CSRF安全漏洞的问题。