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非常類似。
[備注]适合單個小流量站點的監控,統計和查詢算法性能很差。