Cookie 在不同浏览器中的实现和行为存在差异,了解这些差异对于开发兼容性良好的 Web 应用非常重要。
主要浏览器 Cookie 差异
- 容量限制
- Chrome:每个 Cookie 4KB,每个域名约 180 个
- Firefox:每个 Cookie 4KB,每个域名约 150 个
- Safari:每个 Cookie 4KB,每个域名约 600 个
- Edge:与 Chrome 相同
- 第三方 Cookie 限制
- Chrome:逐步限制,计划 2024 年开始默认阻止
- Firefox:默认阻止第三方追踪 Cookie
- Safari:默认阻止所有第三方 Cookie(ITP 策略)
- Edge:与 Chrome 相同
- SameSite 默认行为
- Chrome 80+:默认 SameSite=Lax
- Firefox 79+:默认 SameSite=Lax
- Safari 12+:默认 SameSite=Lax
- Edge 80+:默认 SameSite=Lax
- Secure 标志要求
- Chrome:SameSite=None 必须配合 Secure
- Firefox:SameSite=None 必须配合 Secure
- Safari:SameSite=None 必须配合 Secure
- Edge:SameSite=None 必须配合 Secure
Safari ITP(智能追踪预防)
- 自动删除 7 天后未访问的第三方 Cookie
- 限制 Cookie 的有效期最长 7 天
- 影响跨域登录和追踪功能
Firefox ETP(增强追踪保护)
- 严格模式阻止所有第三方追踪 Cookie
- 标准模式阻止已知的追踪器 Cookie
- 可通过 about:preferences#privacy 配置
Chrome 隐私沙盒
- 计划逐步淘汰第三方 Cookie
- 引入 FLoC、Topics API 等替代方案
- 开发者需要提前准备迁移方案
兼容性处理建议
- 检测浏览器支持
javascriptfunction supportsSameSiteNone() { try { document.cookie = 'test=1; SameSite=None; Secure'; return document.cookie.includes('test=1'); } catch (e) { return false; } }
- 渐进增强策略
javascriptconst cookieOptions = { httpOnly: true, secure: true, sameSite: 'Lax' // 默认使用 Lax }; // 如果需要跨域,检测支持后再使用 None if (supportsSameSiteNone()) { cookieOptions.sameSite = 'None'; }
- 提供降级方案
- 第三方 Cookie 不可用时使用 LocalStorage
- 实现服务器端会话管理作为备选
- 使用 PostMessage 进行跨域通信
测试建议
- 在多个浏览器中测试 Cookie 功能
- 使用浏览器开发者工具检查 Cookie 设置
- 测试隐私模式下的 Cookie 行为
- 验证跨域 Cookie 的兼容性