如何用Chrome读懂网站监测Cookie

作者 | 朱顺意

责编 | 李雪敬

出品 | CSDN云计算(ID:CSDNcloud)

网站监测工具用于标识用户的 Cookie 分为第1方 Cookie 和第3方 Cookie,这两者本质上没有什么区别,只是身份不同。Cookie 有 Domain 属性,当 Cookie 的 Domain 与当前访问的域名不同时,这个 Cookie 为第3方 Cookie,反之为第1方 Cookie。

由于 Domain 的不同,第1方 Cookie 记录的是用户在指定站点的行为,第3方 Cookie 记录的是用户在不同站点的行为。网站监测工具为你的站点创建了第1方 Cookie,这个 Cookie 属于你的站点,仅能用于记录你站点的用户行为,同时网站监测工具也创建了第3方 Cookie(属于它自己的Cookie),这个 Cookie 用于记录所有部署了监测代码站点的用户行为。

以 Chrome 为工具,我们来看看 Cookie 是怎么样的。

查看Cookie

步骤:打开 Chrome > 访问 www.zhihu.com > 按下 F12 打开 DevTools > 切换到 Application 面板 > 打开左侧 Cookies > 选择 www.zhihu.com。

可以看到,Cookie 有各种属性:

Name:Cookie 名称。

Value:Cookie 值。

Domain:Cookie 域名,代表能读写这个 Cookie 的域。假设在 DevTools 这里 Domain 为“.zhihu.com”(最前面带点),则所有以“zhihu.com”结尾的域名都能读写这个 Cookie。假设 Domain 为“zhihu.com”(最前面不带点),此时 Cookie 仅为当前域所用。如果创建 Cookie 时不声明 Domain,则 Domain 的最前面不带点。如果创建 Cookie 时声明 Domain,则无论声明时有没有带点,在 DevTools 都会自动带点,所声明的域及其所有子域都能读写这个 Cookie。

• Path:Cookie 的有效访问路径,代表基于 Domain 下能读写这个 Cookie 的页面路径。假设 Domain 为 “.zhihu.com”,Path 为 “/”,则 zhihu.com 根目录下所有页面路径都能读写这个 Cookie,如果 Path 为 “/question”,则 Cookie 仅在 question 页面路径下能被读写。

• Expires/Max-Age:Cookie 的过期时间,采用协调世界时(UTC),与中国标准时间相差8小时。时间格式为 ”yyyy-mm-ddThh:mm:ss.sssZ”,T是分隔日期和时分秒的符号,”.sss” 代表毫秒,Z 表示 UTC 零时区。如果创建 Cookie 时默认不填,则此值为 Session,即关闭浏览器自动清除 Cookie。

• Size:Cookie 的大小。

• Httponly:是否允许客户端读写Cookie,常见客户端方法有 document.cookie。

• Secure:是否只能通过 Https 协议读写 Cookie。

• SameSite:跟第3方 Cookie 的读写限制有关,我们后面会讲到。

• Priority:Cookie 的优先级,有 Low/Medium/High 这3种值,当 Cookie 超出浏览器存储上限时,优先级低的 Cookie 将被清除。

第1方Cookie

网站监测工具标识用户常用第1方Cookie,即Cookie的Domain为当前访问站点的顶级域名。以Google Analytics为例(以下简称GA),下面这个蓝底色的就是GA标识用户的Cookie,它的Domain为”.zhihu.com”,所以它为第1方Cookie。

GA 标识用户的 Cookie,Domain 为 ”.zhihu.com”,意味着这个 Cookie 在 zhihu.com的所有子域名下,都能被读写。因此,zhihu.com、www.zhihu.com、daily.zhihu.com、static.daily.zhihu.com 在用同一套监测代码的时候,标识用户所用的 Cookie 是一样的。

GA 标识用户的 Cookie 名称为 “_ga”,它的值是这样构成的:

• 版本号:GA1 为版本相关信息,所有被 GA 监测的站点几乎都一样。

• Domain长度:2为 “_ga” 这个 Cookie 的 Domain 长度,”.zhihu.com” 长度为2。当被监测的站点为 ”xxx.com.cn” 时,Domain 长度为3。当被监测的站点使用多级域名例如 ”www1.www2.xxx.com” 时,在 GA 的这个 Cookie,Domain 依然为顶级域名 ”.xxx.com”,长度依然为2。

• 唯一的随机数:GA 生成的随机数字,具有唯一性。

• 首次访问的时间戳:用户首次访问站点,GA 获得的时间戳,你可以打开 Chrome DevTools 的 Console 面板,用 new Date 把它转换成中国标准时间。这个时间再加上2年,等于这个 Cookie 的 Expires/Max-Age 的中国标准时间,也就是说 GA 标识用户的 Cookie 有效期为2年,2年之后 Cookie 被清除。

从GA的JS代码,也能看出这个值的构成:

那么,这个第1方 Cookie 属于被监测的站点,但又是由 GA 创建,这是怎么一回事?

GA 的 JS 代码包含创建 Cookie 的方法,这段 JS 被嵌入到网站,相当于网站自己创建了 Cookie,因此这个过程不存在跨域的问题。目前市面上的网站监测工具都是用这样的方法来创建第1方 Cookie 的。换言之,GA 这段 JS 也能够读写这个站点的所有第1方 Cookie(已设置 Httponly 的除外)。

第3方Cookie

网站监测代码在发起请求时,能创建 Domain 不同于当前站点的 Cookie,也就是第3方 Cookie,它一般用于追踪用户在不同站点的访问行为。

以百度统计为例,只要你的站点部署了百度统计代码,就能看到这个名为 ” HMACCOUNT_BFESS” 的第3方 Cookie,它看起来就是这样的字符串:

这时右键选中 Cookie,选择 ”Show Requests With This Cookie”:

打开了 Network,点击第1个请求,拉到 Request Headers 会发现有2个 Set-Cookie,说明这个第3方 Cookie 这是由服务器端设置的:

第1个的末尾标记了黄色符号,代表这个 Cookie 没有创建成功,因为创建时没有设置 SameSite 和 Secure。第2个 Cookie,也就是 ”HMACCOUNT_BFESS”,因为同时满足 SameSite=None 和 Secure=Ture 这两个条件,Cookie 能被创建。

SameSite 属性是什么?这是一个限制第3方 Cookie 创建、读写的属性。从 Chrome v80 开始,对第3方 Cookie 的限制就严格了许多。现在想要创建第3方 Cookie,需要满足以下条件:

①通过 Https 协议

②设置 SameSite 为 None

③设置 Secure 为 True

当一个 Cookie 作为第3方 Cookie 时,它能不能被读写,由 SameSite 决定。当然这个读写,还是必须先取决于 Cookie 的 Domain,否则就成跨域了。SameSite 有以下3种值:

①Strict

假如 Cookie 的 SameSite为Strict,则当它作为第3方 Cookie 时会被完全禁止读取,尽管你可能在 DevTools 的 Application 面板还能看到这个 Cookie。

②Lax

假如 Cookie 的 SameSite 为 Lax,那么当请求为以下类型,才能读写这个第3方 Cookie:

Lax也是Chrome的默认设置。

③None

想要关闭 SameSite 属性,可以设置第3方 Cookie 的 SameSite 属性为 None,要想读取 Cookie 同时还必须设置 Secure 为 True。这也是为什么我们看到百度统计的 Cookie 设置了 SameSite=None 和 Secure 属性。

第1方 Cookie 和第3方 Cookie 在网站监测都很重要,如今 Chrome 对第3方 Cookie 的限制越来越强,为网站监测工具读写第3方 Cookie 增加了一定难度。如何在合理追踪用户行为的同时保护用户隐私,这是一个值得全行业探讨的主题。

更多阅读推荐

  • 下一代 IDE:Eclipse Che 究竟有什么奥秘?

  • 窃隐私、放高利贷,输入法的骚操作真不少!

  • 进入编译器后,一个函数经历了什么?

  • 程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万

  • 5年5亿美金,华为昇腾如何争夺AI开发者?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DataWorks百问百答01:数据同步该用什么资源组

引子 很多用户在使用数据集成建立同步任务时,往往都会困惑一个设置,即“资源组设置”。 大家常有的疑问是“资源组是用来做什么的?跟网络之间什么关系?我该选择那种资源组?” 下面本文给您一个简要的介绍。 什么是资源…

在阿里,40岁的奋斗姿势

在阿里,40岁的奋斗姿势 在阿里,什么样的年纪可以称为老呢?35岁? 在云网络,有这样一群人,他们的平均年龄接近40,却刚刚开辟职业生涯的第二战场。 他们的奋斗姿势是什么样的呢? 洛神…

nginx配置多个conf文件

今天整理了下,在centos 7.6 系统下怎么配置多个conf文件。 step 1:在nginx.conf文件所在目录新建conf.d目录,即mkdir conf.d,为确保权限能够访问到 chmod 777 conf.dstep 2:编辑nginx.conf文件,内容为: #user nobody…

CPU有个禁区,内核权限也无法进入!

来源 | 编程技术宇宙封图 | CSDN 下载自视觉中国神秘项目我是CPU一号车间的阿Q,是的,我又来了。最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥。前几天,我又去找他&…

Vue---淘宝镜像cnpm---安装vue-cli

1. 淘宝镜像命令 npm install -g cnpm --registryhttps://registry.npm.taobao.org 2. 安装vue-cli脚手架 npm install -g vue/cli 3.vue-cli脚手架更新 npm i -g vue/cli 4. 查看当前vue-cli版本号 vue -V

防删库实用指南 | 只需一步,快速召回被误删的表

数据库的一些非常不错的企业级功能都是“养兵千日,用兵一时”,比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时&…

智能化中的控制与自动化中的控制不同

智能化中的控制相对于自动化中的控制更加灵活、智能、综合和学习能力强。智能化控制系统能够根据实际情况进行自主决策和优化,适用范围更广,效果更好。 首先,智能化控制系统能够根据外部环境的变化和实时数据的反馈来自主调整和优化控制策略&…

Flink on Zeppelin (4) - 机器学习篇

今天我来讲下如何在 Zeppelin 里做机器学习。机器学习的重要性我就不多说了,我们直奔主题。 Flink 在机器学习这个领域发力较晚,社区版没有一个完整的机器学习算法库可以用,Alink[1]是目前 Flink 生态圈相对比较完整的机器学习算法库&#x…

docker yum 安装

文章目录一、安装docker1. 卸载旧版本2. 需要的安装包3. 设置镜像仓库4. yum更新软件包索引5. 安装docker-ce6. 启动docker7. 查看版本二、卸载docker2.1. 卸载docker2.2. 删除docker资源三、指定版本安装docker一、安装docker https://docs.docker.com/engine/install/centos…

解决Vue3创建项目后的Error: Cannot find module ‘vue-loader-v16/package.json‘问题

1. 卸载vue-loader-v16依赖 npm uninstall vue-loader-v16 2.使用cnpm安装vue-loader-v16依赖 cnpm i vue-loader-v16 最后npm run serve 重新启动项目

五个问答,告诉你阿里云对象存储如何助力钉钉战胜业务洪峰

“基于OSS在弹性扩容、跨省容灾、多租户管理以及传输加速方面的基础能力,钉钉在此次战役过程中,实现了一键切换写入区域,拆分业务到多个区域的功能,同时钉钉在跨区域的图片处理、文档预览的并发处理量上有了10倍速的提升。”——钉…

知乎高赞:一行代码凭什么躺普通程序员的10年工资?

笔者这两天闲逛知乎,看到了这个帖子:匿名答题,发表于2014年,此外没有留下任何多余信息。2年躺赚200万,相当于普通程序员10年的工资。没想到Pyhon这么强大,怪不得有人说“除了不会生孩子,Python什…

第九弹 - 脚本模式与参数视图

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高…

Vue3---安装Element-Plus组件库

*** 全局安装Element-Plus 1. npm安装 npm install element-plus --save 2. 在main.js中引入以下内容 import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vue const app createApp(App…

在家“隔离”这1个月,阿里云视频云这些工程师都经历了什么?

战"疫”当前,没有谁会置身事外。从1月底开始,一场全民疫情阻击战拉开帷幕,企业停工、学校停课、商场停业,城市街道分外冷清,相反的是,无法出门的数亿网民却在互联网上掀起了一阵不小的流量热潮。距离2…

CSDN的常用文本设置(字体大小红色)

<font face"黑体" color#FF0000 size4> **在这里放入需要修改颜色的语句**</font>在这里放入需要修改颜色的语句

让安全威胁无所遁形,全方位掌握攻击“前世今生”的黑科技来了

作者 | 伍杏玲出品 | CSDN&#xff08;ID:CSDNnews&#xff09;据启明星辰发布的《2019~2020网络安全态势观察报告》显示&#xff0c;在过去一年多时间里&#xff0c;勒索攻击由 2014 年的广泛无目的的传播阶段到2017 年 WannaCry 带来的大规模自动化传播阶段&#xff0c;如今已…

Vue3---vue组件库

1.vue-form-making 基于 vue 和 element-ui 实现的表单设计器&#xff0c;使用了最新的前端技术栈&#xff0c;内置了 i18n 国际化解决方案&#xff0c;可以让表单开发简单而高效。 项目地址&#xff1a;https://gitee.com/gavinzhulei/vue-form-making 2.viewUI ViewUI 是…

docker mysql 日志在哪里_docker容器启动后日志在哪里

docker容器启动后日志在哪里&#xff1f; docker启动后日志会在以下位置 /var/lib/docker/containers/容器ID/容器ID-json.log 也可以使用以下命令查看日志&#xff1a; docker logs 容器ID使用docker-compose可以通过配置把日志记录到本地文件中 实战&#xff0c;演示以mys…

数据价值挖掘利器!阿里云实时数仓AnalyticDB PG

目的 随着数字经济时代的到来&#xff0c;越来越多的应用依赖数据分析来挖掘数据的价值。作为大数据存储、在线分析的重要基础系统&#xff0c;分析型数据库&#xff08;OLAP&#xff09;为数据价值的在线化提供重要的技术平台。 阿里巴巴OLAP团队经过调研发现&#xff0c;现…