Cookie 同意实施指南:合法合规的同意管理

实施符合 GDPR、ePrivacy、CCPA 和全球法规的 cookie 同意。涵盖同意横幅、cookie 分类和 CMP 集成。

E
ECOSIRE Research and Development Team
|2026年3月16日4 分钟阅读822 字数|

属于我们的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

各地区的法律要求

要求欧盟(GDPR + 电子隐私)英国(PECR + 英国 GDPR)美国(CCPA/州法律)巴西 (LGPD)加拿大(PIPEDA)
对非必要 cookie 的事先同意是(选择加入)是(选择加入)否(选择退出模式)是(选择加入)允许默示同意
需要同意横幅是的是的不需要(但推荐)是的推荐
细化选择(按类别)是的是的不需要是的推荐
接受/拒绝同等重要是的是的不适用是的不适用
允许 Cookie 墙否(在大多数州)没有不适用没有不适用
需要同意记录是的是的没有是的是的
同意续订期限最长 12 个月最长 12 个月不适用未指定未指定
需要 Cookie 政策是(详细)是(详细)是(如果跟踪)是的是的

e隐私指令不仅涵盖 HTTP cookie,还涵盖在用户设备上存储或访问信息的所有技术:

  • HTTP cookie(第一方和第三方)
  • 本地存储和会话存储
  • 索引数据库
  • 设备指纹识别
  • 跟踪像素/网络信标
  • 用于跟踪的 ETag

标准类别

类别需要同意吗?示例默认状态
绝对必要没有会话 cookie、CSRF 令牌、负载均衡器 cookie、身份验证永远在线
功能/偏好是的语言偏好、主题偏好、保存的购物车关闭(直到同意)
分析/绩效是的Google Analytics、Hotjar、合理(带 cookie)关闭(直到同意)
营销/广告是的Google Ads、Facebook Pixel、重定向 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 访客 ID2 年第三方(谷歌)
代码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 同意横幅的网站:

工具饼干需要 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 发布——帮助企业实现用户信任的隐私合规性。

E

作者

ECOSIRE Research and Development Team

在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。

通过 WhatsApp 聊天