javascript - 由于 Cookie 的“SameSite”和“安全”设置,Google Analytics 在 IFrame 中被阻止
问题描述
我们正在运行一项服务our-site.com
。我们的客户可以通过简单地从their-site.com
to链接our-site.com/customer-service
或通过 iFrame 将我们的服务嵌入到their-site.com
. 想象一下直接访问 GMap 与看到它嵌入到 IFrame 中。
使用我们在 Ifarme 的服务访问“外国”页面
从 Chrome 80(我猜)开始,当服务在 iFrame 中运行时,我们的 Google Analytics 停止工作。Chrome 正在给我这个(非常清楚)消息:
与http://our-site.com/上的跨站点资源关联的 cookie设置为没有该
SameSite
属性。SameSite=None
它已被阻止,因为 Chrome 现在仅在使用和设置时才提供带有跨站点请求的 cookieSecure
。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在https://www.chromestatus.com/feature/5088147346030592和https://www.chromestatus.com/feature/5633521622188032中查看更多详细信息。
此外,如果我使用嵌入在 iFrame 中的访问their-site.com
,our-site.com/customer-service
我在 GA 实时概览中看不到任何内容。
如果我手动禁用 2 个功能same-site-by-default-cookies
并使用嵌入在 iFrame 中的访问,我确实会在 GA 实时概览中看到页面cookies-without-same-site-must-be-secure
访问chrome://flags
。their-site.com
our-site.com/customer-service
访问我们的服务“独立”
直接访问our-site.com/customer-service
GA 时仍然可以正常工作:
- 开发工具中没有警告
- 与 GA 关联的多个 cookie 显示在开发工具 > 应用程序选项卡中
- 我可以在 GA 实时概览中看到页面访问量
- 两个 cookie 都没有设置
Secure
orSameSite
值(全部为“空白”)......
问题
在外部域的 iFrame 内运行时,我能做些什么来让 GA 再次工作?
示例代码
我刚刚创建了一个非常简单的测试环境,它也显示了上述问题:
our-site.com/customer-service
<html lang="en">
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={tracking-id}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag("js", new Date());
gtag("config", "{tracking-id}");
</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>our site service</title>
</head>
<body>our-site.com/customer-service</body>
</html>
他们的网站
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>their-site.com</title>
</head>
<body>
<iframe src="https://www.our-site.com/customer-service" style="width: 500px; height: 500px;"></iframe>
</body>
</html>
即使是这个非常简单的示例也显示了上述行为,our-site.com/customer-service
直接打开,在 GA 实时概览中显示数据,而打开their-site.com
则不...
解决方案
_ga
在第三方上下文(iframe)中访问第一方 cookie ( ) 时,必须显式添加cookieFlags
value samesite=none;secure
。
各种场景的详细描述可以在这篇博文中找到。
推荐阅读
- frameworks - 跨平台的最佳桌面应用程序框架
- javascript - Javascript执行一个函数,两个数组的索引数是否相等?
- java - 尝试从不同节点级别提取特定键的值时出错
- android - 顶部操作栏阻止 Cardview
- r - 在 Travis 上使用 devtools 安装 R 包时遇到问题
- python - 为两个列表 separet.py 组合每个项目
- c# - 使用 Novell LDAP 在 .NET Core 中针对 AD 进行页面 LDAP 查询
- mysql - 在 if 语句中插入 SQL 问题
- c - recvmsg() 如何在不违反严格别名的情况下将消息控制到堆栈缓冲区?
- php - PHP MYSQL 联合查询