属于我们的Compliance & Regulation系列
阅读完整指南自 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.
相关文章
BMF Programmablaufplan Lohnsteuer 2026:实施德国官方工资税计算(XML、API、Odoo)
BMF Programmablaufplan Lohnsteuer 2026 开发人员指南:PAP 是什么、XML 伪代码格式、官方测试服务以及到 Odoo 工资单的映射。
服装和时尚品牌 ERP:尺码-颜色矩阵、季节规划和合规性(2026 年指南)
2026 年时尚和服装品牌如何选择 ERP:尺寸-颜色矩阵变体、季节性规划、GoBD 和 DATEV 合规性、供应商比较和成本。
ERPNext 2026 年人力资源和薪资:设置、薪资结构和多国合规性
2026 年 ERPNext 人力资源和工资单逐步设置:HRMS 应用程序安装、工资结构、工资单录入运行、所得税表、多国合规性。
更多来自Compliance & Regulation
BMF Programmablaufplan Lohnsteuer 2026:实施德国官方工资税计算(XML、API、Odoo)
BMF Programmablaufplan Lohnsteuer 2026 开发人员指南:PAP 是什么、XML 伪代码格式、官方测试服务以及到 Odoo 工资单的映射。
服装和时尚品牌 ERP:尺码-颜色矩阵、季节规划和合规性(2026 年指南)
2026 年时尚和服装品牌如何选择 ERP:尺寸-颜色矩阵变体、季节性规划、GoBD 和 DATEV 合规性、供应商比较和成本。
ERPNext 2026 年人力资源和薪资:设置、薪资结构和多国合规性
2026 年 ERPNext 人力资源和工资单逐步设置:HRMS 应用程序安装、工资结构、工资单录入运行、所得税表、多国合规性。
2026 年 GoHighLevel A2P 10DLC 合规性:注册、费用和修复被阻止的短信
2026 年完整的 GoHighLevel A2P 10DLC 指南:品牌和活动注册步骤、运营商费用、常见拒绝原因以及如何修复过滤短信。
ERP 系统的 GxP 验证:您的 2026 年验证 RFP 必须要求什么(CSV、IQ/OQ/PQ、审计跟踪)
2026 年 GxP ERP 验证 RFP 必须要求的内容:CSV 和 CSA 范围、21 CFR 第 11 部分、EU 附件 11、IQ/OQ/PQ 可交付成果、审计跟踪和 GAMP 5 风险。
OpenClaw 安全模型、数据驻留、SOC 2 和 ISO 27001
OpenClaw 安全架构:租户隔离、加密、秘密管理、审计日志、数据驻留、SOC 2、ISO 27001、GDPR、HIPAA 适应性。