天天看點

GA/百度統計/Piwik:網站分析工具的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請求包後向監控伺服器(analytics.com)發送資料。

科普的知識介紹完了,如果你還是有不太了解的地方,建議google或baidu一下,這會對你了解網站分析工具非常有幫助。

cookie的使用,ga vs 百度統計 vs piwik:

ga:第一方cookie

百度統計:第一方cookie+第三方cookie

piwik:第三方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 分鐘

__utmc

session

__utmz

campaign values

6 個月

如果訪客在網站上處于非活動狀态的時間超過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年

hm_lpvt_siteid

目前浏覽頁面時的時間,每次浏覽時設定該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 

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來管理所有站點資訊,适用于單個或少量站點的使用,對于需要監控多個站點的使用者來說存在一定的風險。

評價與總結

ga:

[cookie]充分、大膽的使用cookie進行資訊存儲。

[訪次切分]訪次切分的設計比較合理。

[備注]基本成為業界的标準。

百度統計:

[cookie]cookie使用上還不夠大膽。

[訪次切分]訪次切分依賴于來源判斷,相對于ga的統計方法容易出現訪次虛高的現象。

[備注]cookie中沒有保持任何訪次的狀态資訊,那麼統計程式需要儲存所有沒有結束的visit的狀态資訊。對于每天上億訪次服務來講,長遠來看這種設計的性能和擴充性無疑會受到非常大的挑戰。

piwik:

[cookie]cookie加密驗證的方式一定程度上減輕了cookie的存儲量,也提高了惡意攻擊者僞造cookie成本。但piwik将所有的資訊儲存在第三方cookie中,多站點情況下有cookie溢出的風險。

[訪次切分]訪次切分規則ga非常類似。

[備注]适合單個小流量站點的監控,統計和查詢算法性能很差。

繼續閱讀