属于我们的Compliance & Regulation系列
阅读完整指南Cookie 同意实施指南:合法合规的同意管理
自 2020 年以来,GDPR 专门针对 Cookie 同意违规行为开出了超过 4 亿欧元的罚款。 法国 CNIL 对 Google 处以 1.5 亿欧元的罚款,对 Facebook 处以 6000 万欧元的罚款,原因是让接受 Cookie 比拒绝 Cookie 更容易。 Cookie 同意不再是一个复选框练习——它是隐私法中一个严格执行的领域,具有特定的技术要求。
本指南涵盖网站和 Web 应用程序的 cookie 同意的法律要求、技术实施和持续管理。
要点
- 根据 GDPR 和 ePrivacy,必须在设置非必要 cookie 之前获得同意 --- 而不是之后
- 同意必须像给予一样容易撤回(一键拒绝,而不是隐藏在设置中)
- Cookie 墙(“接受或离开”)在大多数欧盟成员国都是非法的
- 自 2024 年 3 月起,欧洲经济区的 Google Analytics 和广告需要 Google 同意模式 v2
各地区的法律要求
Cookie 同意要求比较
| 要求 | 欧盟(GDPR + 电子隐私) | 英国(PECR + 英国 GDPR) | 美国(CCPA/州法律) | 巴西 (LGPD) | 加拿大(PIPEDA) |
|---|---|---|---|---|---|
| 对非必要 cookie 的事先同意 | 是(选择加入) | 是(选择加入) | 否(选择退出模式) | 是(选择加入) | 允许默示同意 |
| 需要同意横幅 | 是的 | 是的 | 不需要(但推荐) | 是的 | 推荐 |
| 细化选择(按类别) | 是的 | 是的 | 不需要 | 是的 | 推荐 |
| 接受/拒绝同等重要 | 是的 | 是的 | 不适用 | 是的 | 不适用 |
| 允许 Cookie 墙 | 否(在大多数州) | 没有 | 不适用 | 没有 | 不适用 |
| 需要同意记录 | 是的 | 是的 | 没有 | 是的 | 是的 |
| 同意续订期限 | 最长 12 个月 | 最长 12 个月 | 不适用 | 未指定 | 未指定 |
| 需要 Cookie 政策 | 是(详细) | 是(详细) | 是(如果跟踪) | 是的 | 是的 |
什么才算是 Cookie
e隐私指令不仅涵盖 HTTP cookie,还涵盖在用户设备上存储或访问信息的所有技术:
- HTTP cookie(第一方和第三方)
- 本地存储和会话存储
- 索引数据库
- 设备指纹识别
- 跟踪像素/网络信标
- 用于跟踪的 ETag
Cookie 分类
标准类别
| 类别 | 需要同意吗? | 示例 | 默认状态 |
|---|---|---|---|
| 绝对必要 | 没有 | 会话 cookie、CSRF 令牌、负载均衡器 cookie、身份验证 | 永远在线 |
| 功能/偏好 | 是的 | 语言偏好、主题偏好、保存的购物车 | 关闭(直到同意) |
| 分析/绩效 | 是的 | Google Analytics、Hotjar、合理(带 cookie) | 关闭(直到同意) |
| 营销/广告 | 是的 | Google Ads、Facebook Pixel、重定向 cookie | 关闭(直到同意) |
审核您的 Cookie
在实施同意之前,请审核您网站设置的每个 cookie:
// Browser console: list all cookies
document.cookie.split(';').forEach(c => console.log(c.trim()));
// Or use a scanning tool
// cookiebot.com/en/cookie-checker
// 2gdpr.com
记录每个 cookie:
| Cookie 名称 | 类别 | 目的 | 持续时间 | 第一方/第三方 |
|---|---|---|---|---|
| 代码0 | 绝对必要 | 认证 | 会议 | 第一方 |
| 代码0 | 绝对必要 | 令牌刷新 | 7 天 | 第一方 |
| 代码0 | 绝对必要 | 语言偏好 | 1 年 | 第一方 |
| 代码0 | 分析 | Google Analytics 访客 ID | 2 年 | 第三方(谷歌) |
| 代码0 | 营销 | Facebook 像素追踪 | 90 天 | 第三方(Facebook) |
技术实现
选项 1:同意管理平台 (CMP)
|化学机械抛光 |免费套餐 |符合 GDPR |谷歌 CMP 合作伙伴 | IAB TCF 2.2 | IAB TCF 2.2 |-----|---------|----------------|--------------------|-------------| |饼干机器人 |最多 1 页 |是的 |是的 |是的 | |一个信托 |没有 |是的 |是的 |是的 | |大野 |多达 5,000 名访客 |是的 |是的 |没有 | |定期 |基本计划|是的 |是的 |没有 | | Cookie 脚本 |最多 1 个站点 |是的 |是的 |没有 |
选项 2:自定义实施
对于想要完全控制的团队:
// lib/cookie-consent.ts
type ConsentCategory = 'necessary' | 'functional' | 'analytics' | 'marketing';
interface ConsentPreferences {
necessary: true; // Always true, cannot be changed
functional: boolean;
analytics: boolean;
marketing: boolean;
timestamp: string;
version: string;
}
const CONSENT_COOKIE = 'ecosire_consent';
const CONSENT_VERSION = '2.0';
const CONSENT_DURATION = 365; // days
export function getConsent(): ConsentPreferences | null {
const cookie = document.cookie
.split(';')
.find(c => c.trim().startsWith(`${CONSENT_COOKIE}=`));
if (!cookie) return null;
try {
const prefs = JSON.parse(decodeURIComponent(cookie.split('=')[1]));
// Invalidate if consent version changed
if (prefs.version !== CONSENT_VERSION) return null;
return prefs;
} catch {
return null;
}
}
export function setConsent(preferences: Omit<ConsentPreferences, 'necessary' | 'timestamp' | 'version'>) {
const consent: ConsentPreferences = {
necessary: true,
...preferences,
timestamp: new Date().toISOString(),
version: CONSENT_VERSION,
};
const expires = new Date(Date.now() + CONSENT_DURATION * 86400000).toUTCString();
document.cookie = `${CONSENT_COOKIE}=${encodeURIComponent(JSON.stringify(consent))}; expires=${expires}; path=/; SameSite=Lax`;
// Apply consent decisions
applyConsent(consent);
return consent;
}
function applyConsent(consent: ConsentPreferences) {
if (consent.analytics) {
// Initialize Google Analytics
loadScript('https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX');
}
if (consent.marketing) {
// Initialize marketing pixels
loadScript('https://connect.facebook.net/en_US/fbevents.js');
}
if (!consent.analytics) {
// Remove analytics cookies
deleteCookie('_ga');
deleteCookie('_gid');
}
if (!consent.marketing) {
// Remove marketing cookies
deleteCookie('_fbp');
deleteCookie('_fbc');
}
}
Google 同意模式 v2
自 2024 年 3 月起,欧洲经济区的 Google Analytics(分析)和 Google Ads 需要:
<!-- Set default consent state BEFORE loading Google tags -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Default: deny all until user consents
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'denied',
'personalization_storage': 'denied',
'security_storage': 'granted', // Always granted (necessary)
'wait_for_update': 500 // Wait for CMP
});
</script>
<!-- Load Google Tag Manager -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
当用户表示同意时:
// Update consent state when user interacts with banner
function updateGoogleConsent(preferences) {
gtag('consent', 'update', {
'ad_storage': preferences.marketing ? 'granted' : 'denied',
'ad_user_data': preferences.marketing ? 'granted' : 'denied',
'ad_personalization': preferences.marketing ? 'granted' : 'denied',
'analytics_storage': preferences.analytics ? 'granted' : 'denied',
'functionality_storage': preferences.functional ? 'granted' : 'denied',
'personalization_storage': preferences.functional ? 'granted' : 'denied',
});
}
同意横幅设计要求
欧盟法律要求
- 横幅在设置任何非必要的 cookie 之前出现
- [ ]“接受全部”和“拒绝全部”按钮具有同等的视觉突出度
- 提供精细的类别选择(不仅仅是全有或全无)
- 不预先勾选非必要类别的复选框
- 每个类别的清晰、通俗易懂的语言解释
- 链接到完整的 cookie 政策
- 随时可以撤销同意(例如页脚链接)
- 无 cookie 墙(必须能够在未经同意的情况下使用该网站)
- 同意记录时间戳和版本
辅助功能要求
- 横幅可通过键盘导航
- 兼容屏幕阅读器(ARIA 标签)
- 足够的色彩对比度
- 不会永久阻止重要内容
无 Cookie 分析替代方案
对于想要完全避免 Cookie 同意横幅的网站:
| 工具 | 饼干 | 需要 GDPR 同意 | 数据位置 | 价格 |
|---|---|---|---|---|
| 似是而非的 | 无 | 没有 | 欧盟 | 9 美元/月 |
| 探寻 | 无 | 没有 | 欧盟/美国/加拿大 | 14 美元/月 |
| 鲜味 | 无 | 没有 | 自托管 | 免费 |
| 简单分析 | 无 | 没有 | 欧盟 | 9 美元/月 |
| Matomo(无 cookie 配置) | 可选 | 否(无 cookie) | 自托管 | 免费 |
使用无 cookie 的分析消除了分析同意的需要,简化了您的同意横幅,仅覆盖营销 cookie(如果使用)。
常见问题
如果我们只使用必要的cookie,我们还需要cookie横幅吗?
不需要。如果您仅使用严格必要的 cookie(身份验证、CSRF、负载平衡),则无需同意,也不需要横幅。但是,您仍然应该在您的隐私政策中披露这些 cookie。当您添加分析(Google Analytics)或任何第三方跟踪时,欧盟法律要求同意横幅。
使用“软选择加入”(继续浏览=同意)是否合法?
不,不符合 GDPR。欧洲数据保护委员会明确表示,继续浏览、滚动或类似的被动行为并不构成有效同意。同意必须是明确的、肯定的行动——点击“接受”或类似的按钮。 Planet49 裁定软选择加入不合规(CJEU,2019)。
我们如何处理单页应用程序的同意?
对于 SPA,检查初始页面加载和每次路由更改时的同意状态。如果未经同意,请勿初始化跟踪脚本。将同意首选项存储在第一方 cookie 中(这本身对于记住同意是绝对必要的)。当用户同意后,初始化跟踪脚本而无需重新加载页面。
我们的 Odoo 网站需要 cookie 同意吗?
如果您的 Odoo 网站为欧盟访问者提供服务,并使用超出严格必要范围的分析、营销像素或功能性 cookie,那么是的。 Odoo 有基本的 cookie 通知,但不符合 GDPR 标准。实施适当的 CMP(例如 Cookiebot)或构建自定义解决方案。 ECOSIRE 提供 Odoo 网站服务,其中包括符合 GDPR 的 cookie 同意。
接下来会发生什么
Cookie 同意是网络隐私合规性中最明显的方面。将其与隐私设计 结合起来用于您的应用程序架构,与数据治理 结合起来用于您的完整数据计划,并与网络安全法规 结合起来以实现更广泛的合规性。
联系 ECOSIRE 以获取 cookie 同意实施和隐私合规咨询。
由 ECOSIRE 发布——帮助企业实现用户信任的隐私合规性。
作者
ECOSIRE Research and Development Team
在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。
相关文章
更多来自Compliance & Regulation
审计准备清单:您的 ERP 如何使审计速度加快 60%
使用 ERP 系统完成审核准备清单。通过适当的文档、控制和自动证据收集,将审计时间减少 60%。
跨境数据传输法规:驾驭国际数据流
通过 SCC、充分性决策、BCR 以及 GDPR、英国和亚太地区合规性的传输影响评估来应对跨境数据传输法规。
按地区划分的网络安全监管要求:全球企业合规地图
了解美国、欧盟、英国、亚太地区和中东的网络安全法规。涵盖 NIS2、DORA、SEC 规则、关键基础设施要求和合规时间表。
数据治理与合规性:科技公司完整指南
完整的数据治理指南,涵盖合规框架、数据分类、保留政策、隐私法规和科技公司的实施路线图。
数据保留策略和自动化:保留您需要的内容,删除您必须的内容
根据 GDPR、SOX 和 HIPAA 的法律要求、保留计划、自动执行和合规性验证来构建数据保留策略。
员工数据隐私管理:平衡人力资源需求与隐私权
根据 GDPR 要求、HR 数据处理基础、监控政策、跨境传输和保留最佳实践来管理员工数据隐私。