如何用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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

美国AI博士指出:60天掌握Python全栈需要...

我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的:先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, tuple 等数据结构,然后再介绍字符串处理和正则表达式&#xff0…

别琢磨了,企业高效灵活运作的秘密拿走:企业邮箱5折起!分享会场抽取苹果手机和猫超卡!

办了公司没个官方邮箱怎么行?还在用私人邮箱联系业务吗? - 不专业! 业务多了维护客户人脉关系怎么整?还在靠数名片管客户?- 太费劲! 公司大了管理维护难?还指望能靠人力运营&#x…

docker 配置nginx镜像出现 403 Forbidden的问题

(1)docker 配置nginx镜像的时候,将映射文件配置到当前宿主机上,启动nginx镜像,,通过域名访问,出现 403 查看nginx error.log日志,发现出现 (2)nginx镜像文件的配置: 启…

一套 SQL 搞定数据仓库?Flink有了新尝试

数据仓库是公司数据发展到一定规模后必然需要提供的一种基础服务,也是“数据智能”建设的基础环节。迅速获取数据反馈不仅有利于改善产品及用户体验,更有利于公司的科学决策,因此获取数据的实时性尤为重要。 目前企业的数仓建设大多是离线一套…

17 年安全界老兵,专注打造容器安全能行吗?

作者 | 伍杏玲出品 | CSDN(ID:CSDNnews)容器作为云原生的代表技术,很多人认为是容器技术掀起云原生的变革:2004 年,谷歌开始使用容器技术,并在2006年发布进程容器,将容器虚拟化基础设施引入 Lin…

“开源”vs“商业”,差别到底有多大?这篇测试一目了然

近些年来在数据分析领域,涌现出很多开源的技术方案,例如Presto、Spark、Impala等。面对多种选择,客户往往会比较困惑、无从下手。此外,MySQL生态非常火热,但对于数据分析类场景,使用此类关系型数据库是否合…

docker: Error response from daemon: driver failed programming external connectivity

docker: Error response from daemon: driver failed programming external connectivity 解决方案 (重新启动docker) systemctl restart docker

该买哪家二手手机呢?程序员爬取京东告诉你!

作者 | AJ Gordon责编 | 李雪敬出品 | CSDN(ID:CSDNnews)当你手头有一件闲置的物品时,最好的办法不是放在家里积灰,而是拿到二手网站上进行拍卖,例如淘宝的闲鱼,京东的拍拍等等。有这方面经验的…

服务3000万制造企业 阿里云数字工厂诚邀合伙人

阿里云工业互联网平台(数字工厂)通过整合阿里云资源可提供从产品研发、生产制造、销售、物流仓储、能源管理等链路中所需要的全部应用。为大型制造企业提供工业大数据分析以实现更高层次的价值挖掘,赋能中小制造企业用云化工具以较低成本实现…