属于我们的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 TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
相关文章
化工行业 ERP:安全、合规性和批量处理
ERP 系统如何管理化学品公司的 SDS 文件、REACH 和 GHS 合规性、批量处理、质量控制、危险品运输和配方管理。
适用于进出口贸易的 ERP:多货币、物流与合规性
ERP 系统如何为贸易公司处理信用证、海关文件、国际贸易术语解释通则、多币种损益表、集装箱跟踪和关税计算。
使用 ERP 进行可持续发展和 ESG 报告:2026 年合规指南
通过 ERP 系统在 2026 年实现 ESG 报告合规性。涵盖 CSRD、GRI、SASB、范围 1/2/3 排放、碳追踪和 Odoo 可持续性。
更多来自Compliance & Regulation
电子商务网络安全:2026 年保护您的业务
2026 年完整电子商务网络安全指南。PCI DSS 4.0、WAF 设置、机器人防护、支付欺诈预防、安全标头和事件响应。
化工行业 ERP:安全、合规性和批量处理
ERP 系统如何管理化学品公司的 SDS 文件、REACH 和 GHS 合规性、批量处理、质量控制、危险品运输和配方管理。
适用于进出口贸易的 ERP:多货币、物流与合规性
ERP 系统如何为贸易公司处理信用证、海关文件、国际贸易术语解释通则、多币种损益表、集装箱跟踪和关税计算。
使用 ERP 进行可持续发展和 ESG 报告:2026 年合规指南
通过 ERP 系统在 2026 年实现 ESG 报告合规性。涵盖 CSRD、GRI、SASB、范围 1/2/3 排放、碳追踪和 Odoo 可持续性。
审核准备清单:准备好您的书籍
完整的审计准备清单,涵盖财务报表准备情况、支持文件、内部控制文件、审计员 PBC 清单和常见审计结果。
澳大利亚电子商务企业商品及服务税指南
完整的澳大利亚电子商务企业 GST 指南,涵盖 ATO 注册、75,000 美元门槛、低值进口、BAS 申报和数字服务 GST。