1. 主域名相同,子域名不同

比如:www.baidu.com 与 m.baidu.com

方案:在主域名下记录 cookie ,document.cookie 设置时,对于 domain 参数可以设置为:.baidu.com

这样,当前网页是在 www.baidu.com 还是在 m.baidu.com 都可以共享使用以主域名 .baidu.com 设置的 cookie 上的值

2. 主域名不同

比如:www.baidu.com 与 www.sogou.com

2.1. 使用第三方 cookie

在 JavaScript 中只能给当前的域名设置 cookie,也就是第一方 cookie。在域名 A 中,通过 img,iframe 等方式引入域名 B 的资源时候,后端给域名 B 的资源设置的 cookie,就是第三方 cookie。

第三方 cookie 在浏览器隐私选项中可配置,如果被关闭,就无法设置第三方 cookie 。也就是会无效。

因为第三方 cookie 涉及到用户隐私的传递,所以这个方案,现在已经被限制。在欧美国家已经有多起使用第三方 cookie 被起诉的案例。

目前,新版的 IE、Safari 等浏览器是默认就设置不能使用第三方 cookie 的。主要是因为兼容性问题,会导致数据不准确。

Chrome、Firefox 等浏览器默认可以使用第三方 cookie,但各个浏览器都可以手动选择关闭。且 Firefox 等浏览器明确表示未来会默认关闭第三方 cookie。

目前百度统计、piwik 等提供这个方案。

这个方案好处是可以完全解决多域名共享用户的问题,缺点是不安全,兼容性越来越差,渐渐趋势是会被浏览器禁止使用。最新消息:Chrome 即将默认禁用第三方 cookie。

2.2. 通过 URL 传递 ID

在域名 A 下把当前保存的用户,传递到域名 B 下,达到两个域名都是一个用户

目前 ga 提供这个方案。下面是详细描述:

https://developers.google.com/analytics/devguides/collection/analyticsjs/cross-domain  必须通过跳转来传递id,

这种方案假设域名 A,到域名 B,必须从域名 A 跳转过去。那在域名 A 可跳转的链接 URL 带上当前域名 A 的 用户ID,在域名 B 中取到这个 用户 ID,

这个方案,限制了必须要可跳转才能传递,需要知道所有可跳转的链接,需要自动加 ID,方案操作起来比较复杂。

2.3. 通过服务端配合记录和传递

不同域名下的页面都集成一段处理 cookie 并和固定服务端通信的接口的 JavaScript 代码片段或者说插件。然后在服务端存储固定 ID ,通过前端的接口来同步 ID

这个方案可行,但成本比较高,设计到服务端的对于用户的大量存储和同步的工作

2.4. 神策的多用户关联

在各端都有登录的情况下,神策的多用户关联同样可以串联起来不同域名下页面的行为。原理是:多个设备可以和一个 登录 ID 进行绑定,形成统一的行为序列

这个方案比较方便,但局限性在于是各个域名下的页面必须都有登录行为,才可以串联起来

消息:Chrome 即将默认禁用第三方 cookie

参考 https://blog.chromium.org/2019/05/improving-privacy-and-security-on-web.html

参考 https://mp.weixin.qq.com/s/4zVrM5bKlRhWER90iZjP-A