GA/百度统计/Piwik/JYC:网站分析工具的Cookie设置和访次切分规则
目前主流的網站分析工具一般都是通過JavaScript檢測的方式進行訪問監控的,包括商業產品(Omniture/JYC統計)、免費產品(GA/百度統計/CNZZ)、開源產品(Piwik)。雖然說原理大致相同,但是不同的工具在一些基礎的統計方法上方式還是有一些微妙的差別。譬如,你在使用多種網站分析工具對同一個網站進行監控時,經常會發現不同的工具給出的Visits總是會有差異(絕對數量有差異,但趨勢一致)。即使理論上所有外部條件都一樣,這種差異也是會存在的。這是因為不同網站分析工具在Cookie的使用和訪次切分的策略有一些差異。
Visits是網站分析的基礎,因此有必要不深入了解一下里面的“秘密”。
在展開這個話題之前,有必要做一些科普性的介紹,當然如果你精通javascript和cookie,完全可以跳過這一段。
兩種不同的Cookie:
- 第一方Cookie:由您瀏覽器訪問的網站所設置。
- 第三方Cookie:由您所瀏覽器訪問網站的合作伙伴設置而成,通常通過嵌入javascript的方式實現。安全級別比第一方Cookie要低。
Cookie跨域訪問問題:
- 網頁中嵌入的第三方javascript有權限讀取和設置第一方cookie和第三方Cookie。
- 當瀏覽器打開某個網站(如:abc.com/index.html)時,在發起HTTP請求時,只會攜帶abc.com域下的Cookie(第一方Cookie)。
- 網頁中嵌入的第三方javascript可以向第三方服務器發起HTTP請求,在發起HTTP請求時,只會攜帶第三方域下的Cookie(第三方Cookie)。
基于javascript網站監控:
當網民訪問一個安裝了監控代碼(javascript)的網頁時,web瀏覽器會發送兩個HTTP請求(如下圖)。
- 根據瀏覽器地址欄的url,訪問網站服務器(abc.com),此HTTP請求會攜帶abc.com域名下Cookie(第一方Cookie)
- 當網頁加載完成后,監控代碼中的javascript將會被執行,javascript獲取referer、第一方Cookie(跨域)、第三方Cookie等信息,組裝HTTP請求包后向監控服務器(stat.xxx.com)發送數據。
科普的知識介紹完了,如果你還是有不太理解的地方,建議Google或Baidu一下,這會對你了解網站分析工具非常有幫助。
Cookie的使用,GA vs 百度統計 vs Piwik vs JYC統計:
- GA:第一方Cookie
- 百度統計:第一方Cookie+第三方Cookie
- Piwik:第三方Cookie
- JYC:第一方Cookie(默認)和第三方Cookie均可(用于跨域識別),可根據企業需求自行選擇。
GA的Cookie設置及訪次切分規則
在默認的配置和使用情況下,Google Analytics(分析)僅會設置表中的4 個 Cookie。(詳見:http://code.google.com/intl/zh-CN/apis/analytics/docs/concepts/gaConceptsCookies.html)
| 名稱 | 用途 | 有效期 | 類型 |
| __utma | Visitor Identifier | 2 年 | 第一方Cookie |
| __utmb | Visit(Session) Identifier | 30 分鐘 | 第一方Cookie |
| __utmc | Visit(Session) Identifier | Session | 第一方Cookie |
| __utmz | Campaign Values | 6 個月 | 第一方Cookie |
如果訪客在網站上處于非活動狀態的時間超過30 分鐘(__utmb失效),或者退出了瀏覽器(__utmc失效),那么這次Visit將結束。無論缺少__utmb或__utmc,GA都會確定開始新的Visit。GA允許你使用 _setSessionCookieTimeout() 方法自定義默認會話時間的長度。
GA Cookie詳情:
(1)__utma ,Visitor識別Cookie
??? 通常來說“Time of initial”<“Beginning of previous session”<“Beginning of current session”,但由于這三個時間戳都是由客戶端javascript計算得到的,所以三個值并沒有嚴格的順序關系,在訪客操作系統時間出現誤差時,有可能出現“Beginning of previous session”>“Beginning of current session”的情況。因此“Time of initial”、“Beginning of previous session”、“Beginning of current session”這三個跟訪問相關的時間戳在GA服務器端統計時,只是作為visit unique id使用,并沒有統計時間上意義。
?? Session counter就像它的名字一樣就是用來計數的,記錄當前訪客訪問此網站的次數。
(2)__utmb && __utmc,Visit識別Cookie
???? 以上是早些__utmb 和 __utmc的值,非常簡單只有Domain Hash的值。從最新GA的Cookie來看,__utmb已經有所變化。
?????如上圖,最新的__utmb包含domain_hash.current_session_pageviews.unknown.current_session_inittime。第三個字段暫時不知道
是什么意思,在我的Firefox和Opera瀏覽器始終是10,你是知情人的話,請留言,謝謝。
(3)__utmz,來源識別Cookie(Google官方稱之為Campaign Values)
?????? __utmz主要是用于記錄訪客流量來源數據。GA在訪客回訪時,會根據前后兩次的來源決定Visit的“來源歸屬”。Visit來源歸屬決策遵循以下規則:
- 投放活動永遠能覆蓋別的渠道
- 自然搜索永遠能覆蓋別的渠道
- 推介網站永遠能覆蓋別的渠道
- 直接輸入永遠覆蓋不了別的渠道
百度統計的Cookie設置及訪次切分規則
百度統計使用了兩種Cookie,第三方Cookie用于識別訪客,第一方Cookie。
| 名稱 | 用途 | 有效期 | 類型 |
| HMACCOUNT | Visitor Identifier,全局唯一 | 永久 | 第三方Cookie,hm.baidu.com域 |
| Hm_lvt_siteid | 記錄訪客當前訪問序列的開始時間,如果沒有設置這個cookie,則訪客為新訪客。當本次訪問是一個新的訪問開始時,更新該cookie為當前時間。 | 1年 | 第一方Cookie |
| Hm_lpvt_siteid | 當前瀏覽頁面時的時間,每次瀏覽時設置該cookie為當前時間。 | Session | 第一方Cookie |
在百度統計中,以下三條任意一個條件成立,則認為是一個新訪次。
- 流量來源(referer)為非本站
- Hm_lpvt_siteid為空
- 服務器端進行計算,一個visit超過30分鐘沒有流量,結束當前訪次
百度統計對Cookie的使用非常簡單,多數的狀態信息存儲和計算在服務器端進行。這種數據構架方式,對服務器端的統計程序來講無疑是非常大的挑戰(有機會我會單獨寫一篇文章介紹一下)。
補充:百度統計對于Visit來源歸屬決策是采用強制覆蓋的方式。
Piwik的Cookie設置及訪次切分規則
| 名稱 | 用途 | 有效期 | 類型 |
| piwik_visitor | 天書 | 2年 | 第三方Cookie |
1%3DYTo2OntpOjE7czozMjoiNDhmODY0MTlhOWUyNmIxYTBlYWI4MjU3NmI4NjgyMmQiO2k6MjtpOjEyOTM3MDI3Njc7aTozO2k6MTI5MzcwMjc2NztpOjQ7czoxOiI3IjtpOjU7czoxOiIyIjtpOjExO2k6MTt9%3A_%3Df755e0a15992cbfa6715890342520e0daa1c562b
上面是一個完整的piwik_visitor Cookie的值,看完后你一定很崩潰,真是又臭又長。還好Piwik是一款開源的工具,不然我這輩子是不能指望能理解上面這段天書的意思了。將“天書”解密,我們會看到它的真實面目。
piwik_visitor解密后是一個多維數組,形式如piwik_visitor[siteid][key],針對某個siteid,有以下幾個key-value對。
| key名稱 | 用途 | 備注 |
| IDVISITOR? | Visitor Identifier | 2年 |
| TIMESTAMP_LAST_ACTION | 當前Visit最近一次行動(瀏覽)時間 | GA使用第一方Cookie,都是由js進行設置。而Pikiw中的Cookie是由服務器端來設置的,因此TIMESTAMP是服務器端的時間。 |
| TIMESTAMP_FIRST_ACTION | 當前Visit第一次行動(瀏覽)時間 | |
| ID_VISIT | Visit Identifier | |
| ID_LAST_ACTION | 上一次行動ID | |
| REFERER_TIMESTAMP | 來源時間 | |
| REFERER_NAME? | 來源名稱 | |
| REFERER_KEYWORD | 來源關鍵詞 | |
| VISITOR_RETURNING | 訪客類型new or return |
Piwik新訪次判斷條件:
- 訪問來自于一個新訪客。
- TIMESTAMP_LAST_ACTION離當前時間超過30分鐘
是否新訪客,取決是否存在piwik_visitor Cookie,以及Cookie解密后一些合法性的檢查。對于第一步檢查失敗,本應淪為“新訪客”的可憐蟲,Piwik還提供了一個非常溫馨的選項 “enable_detect_unique_visitor_using_settings”。如果 enable_detect_unique_visitor_using_settings設置打開,那么Piwik會根據你當次的ip、瀏覽器、操作系統等屬性在所有的歷史記錄中尋找你活動的痕跡,如果能匹配到,那么你就有了“舊訪客”的身份了(當然這個是以犧牲性能為代價的)。
Piwik使用一個獨立第三方的Cookie來管理所有站點信息,適用于單個或少量站點的使用,對于需要監控多個站點的使用者來說存在一定的風險。
JYC統計的Cookie設置及訪次切分規則
| key名稱 | 用途 | 類型 | 備注 |
| www%5Fadjyc%5Fcom? | Visitor Identifier唯一 | 第一方Cookie | 永久 |
Cookie值:2019101912091455923781394代表2019年10月19日12時9分14秒+隨機位數,共25位。
JYC新訪次判斷條件:
- 訪問來自于一個新訪客。
- 如果f訪客第二天訪問,發現存在key值,則為老訪客,否則為新訪客。
評價與總結
GA:
- [Cookie]充分、大膽的使用Cookie進行信息存儲。
- [訪次切分]訪次切分的設計比較合理。
- [備注]基本成為業界的標準。
百度統計:
- [Cookie]Cookie使用上還不夠大膽。
- [訪次切分]訪次切分依賴于來源判斷,相對于GA的統計方法容易出現訪次虛高的現象。
- [備注]Cookie中沒有保持任何訪次的狀態信息,那么統計程序需要保存所有沒有結束的Visit的狀態信息。對于每天上億訪次服務來講,長遠來看這種設計的性能和擴展性無疑會受到非常大的挑戰。
Piwik:
- [Cookie]Cookie加密驗證的方式一定程度上減輕了Cookie的存儲量,也提高了惡意攻擊者偽造Cookie成本。但Piwik將所有的信息保存在第三方Cookie中,多站點情況下有Cookie溢出的風險。
- [訪次切分]訪次切分規則GA非常類似。
- [備注]適合單個小流量站點的監控,統計和查詢算法性能很差。
JYC:
- [Cookie]充分、大膽的使用Cookie進行信息存儲。
- [訪次切分]訪次切分的設計比較合理,新老訪客直觀識別。
- [備注]國內創新統計審計監控,支持鼠標軌跡錄像功能,獨有算法技術、輕松支持日均百萬流量PV。
?相關參考https://developer.aliyun.com/article/31470,并調整。
總結
以上是生活随笔為你收集整理的GA/百度统计/Piwik/JYC:网站分析工具的Cookie设置和访次切分规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不定积分公式和推导
- 下一篇: 灰色按钮激活程序的原理 (学习)