一、Cookie核心字段(必知必会)
1. Name
(名称)
- 作用:标识Cookie的唯一名称,与
Value
成对存储数据。
- 示例:
session_id
、username
。
- 注意:名称不可包含空格、分号等特殊字符,区分大小写。
2. Value
(值)
- 作用:存储具体数据,如用户标识、偏好设置。
- 示例:
Value=123abc
、Value=theme=dark
。
- 限制:单个Cookie大小通常不超过4KB,值需编码(如URL编码)避免特殊字符解析错误。
3. Domain
(域名)
- 作用:指定Cookie可被哪些域名访问(跨域限制)。
- 示例:
- 设为
example.com
,则sub.example.com
也可访问;
- 设为
sub.example.com
,仅该子域名可访问。
- 安全场景:禁止将主域名Cookie暴露给第三方子域名(如
Domain=.example.com
需谨慎使用)。
4. Path
(路径)
- 作用:指定Cookie可被哪些路径访问(细化域名下的路径权限)。
- 示例:
Path=/
:根路径下所有页面均可访问;
Path=/api
:仅example.com/api
及子路径可访问。
- 应用:后端接口专用Cookie可限定
Path=/api
,减少前端页面误用。
5. Expires
(过期时间)
- 作用:指定Cookie的失效时间(绝对时间戳)。
- 示例:
Expires=Thu, 01 Jan 2025 00:00:00 GMT
。
- 对比:若不设置
Expires
或Max-Age
,则为会话级Cookie(浏览器关闭后失效)。
6. Max-Age
(最大存活时间)
- 作用:指定Cookie从创建到失效的秒数(相对时间)。
- 示例:
Max-Age=86400
(24小时后失效)。
- 优先级:
Max-Age
优先级高于Expires
,且更易计算(推荐使用)。
二、Cookie安全相关字段(面试加分项)
1. Secure
(安全标志)
- 作用:标记Cookie仅在HTTPS协议下发送,禁止HTTP传输。
- 场景:支付场景Cookie必须设置
Secure
,防止中间人攻击。
2. HttpOnly
(HTTP专用)
- 作用:禁止JavaScript通过
document.cookie
访问Cookie,防止XSS攻击窃取数据。
- 示例:后端设置响应头
Set-Cookie: session_id=123; HttpOnly
。
- 注意:仅能通过HTTP请求发送(如Ajax、表单提交),无法被前端JS读取。
3. SameSite
(同站策略)
- 作用:控制Cookie是否在跨站请求中发送,防范CSRF攻击。
- 值:
Strict
:完全禁止跨站发送(最严格,兼容性差);
Lax
:允许部分跨站场景(如GET请求从a.com跳转到b.com);
None
:允许跨站发送(需搭配Secure
使用)。
- 示例:电商网站设置
SameSite=Lax
,避免用户在钓鱼网站被强制提交订单。
三、字段组合应用场景(结合业务说明)
1. 持久化登录状态
Set-Cookie: token=abc123;
Domain=example.com;
Path=/;
Max-Age=2592000;
HttpOnly;
Secure
- 解析:7天有效期、HTTPS传输、禁止JS访问,适用于用户登录令牌。
2. 跨子域名共享数据
Set-Cookie: user_preference=dark;
Domain=.example.com;
Path=/;
Max-Age=86400
- 解析:主域名与所有子域名(如
blog.example.com
)均可访问该Cookie。
四、扩展问题
1. Cookie与LocalStorage的区别?
- Cookie随HTTP请求发送,适合存储少量认证数据;
- LocalStorage不随请求发送,适合存储大量前端数据(如用户配置)。
2. 如何防范Cookie被窃取?
- 必选
HttpOnly
+Secure
,配合SameSite
限制跨站请求;
- 避免存储敏感信息(如密码),使用JWT等替代方案。
3. 浏览器对Cookie的限制?
- 单个域名下Cookie数量通常限制为20-50个;
- 单个Cookie大小限制约4KB,总存储量限制约4MB。