如何设置 Google Analytics Global Site Tag (gtag.js) 使用的 cookie 的“安全”属性?

Gor*_*son 8 google-analytics gtag.js

我在我的 Github 页面上使用 Google Analytics Global Site Tag (gtag.js) 跟踪代码。以下跟踪代码作为第一项复制并粘贴到<HEAD>我要跟踪的每个网页中(我用 替换了我自己的跟踪 ID GA_MEASUREMENT_ID):

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_MEASUREMENT_ID');
</script>
Run Code Online (Sandbox Code Playgroud)

最近,当我使用 Firefox 浏览器打开我的 Github Pages 站点时,控制台会记录以下警告消息:

Cookie “_ga” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute. To know more about the “sameSite“ attribute, read https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

Cookie “_gid” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute. To know more about the “sameSite“ attribute, read https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite

我该如何解决这个问题?

Gor*_*son 20

可以自定义 gtag.js cookie 设置。具体来说,我们可以设置cookie_flags字段来解决这个问题。

在跟踪代码中,该行

gtag('config', 'GA_MEASUREMENT_ID');
Run Code Online (Sandbox Code Playgroud)

应该改为

gtag('config', 'GA_MEASUREMENT_ID', { cookie_flags: 'SameSite=None;Secure' });
Run Code Online (Sandbox Code Playgroud)

解决问题。

因此整个跟踪代码应如下所示(不要忘记GA_MEASUREMENT_ID用您自己的跟踪 ID替换两次出现的):

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_MEASUREMENT_ID', { cookie_flags: 'SameSite=None;Secure' });
</script>
Run Code Online (Sandbox Code Playgroud)

UPDATE(感谢@RichDeBourke注释):

控制台仍然可以记录如下警告消息:

Cookie “_ga” has been rejected for invalid domain.
Run Code Online (Sandbox Code Playgroud)

要解决此问题,需要配置gtag.js 的 cookie 域。所以原始答案中提到的那一行

gtag('config', 'GA_MEASUREMENT_ID', { cookie_flags: 'SameSite=None;Secure' });
Run Code Online (Sandbox Code Playgroud)

应进一步编辑为

gtag('config', 'GA_MEASUREMENT_ID', {
  cookie_domain: 'YOUR_GITHUB_PAGES_DOMAIN',
  cookie_flags: 'SameSite=None;Secure',
});
Run Code Online (Sandbox Code Playgroud)

然后,整个跟踪代码如下(不要忘记替换YOUR_GITHUB_PAGES_DOMAIN为您自己的 GitHub pages 域(通常,您的实际 GitHub 用户名<username>.github.io在哪里<username>)以及GA_MEASUREMENT_ID您自己的跟踪 ID的两次出现):

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_MEASUREMENT_ID', {
    cookie_domain: 'YOUR_GITHUB_PAGES_DOMAIN',
    cookie_flags: 'SameSite=None;Secure',
  });
</script>
Run Code Online (Sandbox Code Playgroud)

  • @Gorisanson——谢谢你的帖子。我也收到有关 cookie 很快被拒绝的消息,并且您有关添加 *cookie_flags: 'SameSite=None;Secure'* 的信息消除了这些警告。然后我开始在 Firefox 上收到警告:*Cookie“_ga”因无效域而被拒绝*(Chrome 没有显示警告)。添加 cookie 域字段消除了警告。我的 gtag 参数现在为 `("config", "GA_MEASUREMENT_ID", { "anonymize_ip": true, "cookie_domain": ".mysite.com", "cookie_flags": "SameSite=None;Secure" })` – *I使用匿名选项提供更多隐私*。 (3认同)

And*_*rew 6

我刚刚设置了一个 Google Analytics 4 属性,并且在 Firefox 控制台中收到了与原始问题相同的警告:

Cookie“_ga”很快就会被拒绝,因为它的“sameSite”属性设置为“none”或无效值,没有“secure”属性。...

但是将cookie_flags作为选项添加到gtag('config', ...)调用对我不起作用。

浏览器 cookie 存储显示 GA cookie 确实没有那么安全地存储。

我能够通过添加一个额外的来解决这个问题gtag('set', ...),如下所示:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('set', {cookie_flags: 'SameSite=None;Secure'});
  gtag('config', 'GA_MEASUREMENT_ID');
</script>
Run Code Online (Sandbox Code Playgroud)

也许 Google Analytics API 发生了一些变化?

谷歌文档似乎表明,set是你应该如何传球cookie_flags