百度分析的写入cookie操作究竟是什么时候进行的呢?

众所周知,百度统计会往你的浏览器写入一个名字为“HMACCOUNT”的cookie,该cookie的过期时间为2038年,所以只要你没有清空浏览器cookie,基本就永不过期。会以上面那个cookie作为唯一标识而做打点统计。

我对写入cookies的理解是,会在response headers中有对应的set cookie字段,如图下:

图片描述

但是,百度统计中,加载hm.js的时候就会带上HMACCOUNT的cookie,我看不到有对应的set cookie字段。查看了前面所有请求。也找不到有任何请求有set cookie的操作。如图下:
图片描述

请问:

1、百度统计中,写入cookie的操作究竟是什么时候进行的呢?
2、这个写入操作是否可以通过开发者工具中查看到?

阅读 5.5k
3 个回答

1.set-cookie这个响应头是后端返回的,这个一般是后端写的cookie
2.前端js写cookie一般是直接操作document.cookie

cookie信息来源不一定是从后端的响应头中的Set-Cookie返回,也有可能是Web API构造Cookie,详见Document.cookie
浏览器本地只看到HMACCOUNT_BFESS这个cookie信息,而且清空之后就没有了。不清楚要如何使用百度才会插入HMACCOUNT这个cookie信息,但是我想可以尝试通过Object.defineProperty插桩调试定位插入HMACCOUNT的相关逻辑。
按照百度统计相关Cookie列表
image.png
按照这个Cookie列表列出的名称,如果想监听HM/hm相关的cookie信息,可以尝试通过以下代码跟踪:

(function(key){
    let data=document.cookie
    Object.defineProperty(document,'cookie',{
        get:()=>data,
        set:function(newValue){
            data=newValue
            if(newValue.toLowerCase().startsWith(key.toLowerCase())){
                debugger
            }else{
                 console.log('set :',newValue);
            }
        }
    })
}("hm"))
新手上路,请多包涵

百度统计的cookie,分为两类,第一方cookie和第三方cookie。其中:

第一方cookie是利用JS执行document.cookie写入本地的。

第三方cookie则是利用服务端设置响应头Set-Cookie。
在百度统计中,请求了一个gif图片,该响应头就设置在其中。
要注意的一点是,该响应头在chrome或者firefox等浏览器的控制台中,并不能直接观察到。
可以利用charles抓包。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题