追蹤使用者?只知道cookie可不夠

發表於2018-12-19

背景

出於這樣或那樣的目的,我們需要精準的標識每一個使用者,進一步瞭解他們的使用者行為(瀏覽了哪些內容?搜尋了哪些關鍵字?點選了哪些按鈕?在哪裡停留的時間長?等等),甚至是將使用者的不同站點資料關聯起來,然後給使用者提供更加精準、個性化的資訊流。其實好多巨頭早在很久之前就開始做這些工作了,比如某度

作為可以準確標識使用者身份的方案,需要滿足但不限於以下的條件:

  • 唯一性:每個使用者的身份標識都應該是唯一的,區別於其他使用者的
  • 穩定性:保證在特定的時間、條件下,使用者的身份標識保持不變
  • 維度大:需要在面對海量使用者時,依然可以產生唯一的身份標識

下面來分享一下我所瞭解到的,可以標識使用者身份的方案(遞進關係):

1. 方案一 cookie:

這個是我最先接觸到的方式,也是最常見的方式。至於怎麼操作cookie,相信大家都能運用自如了,如果有疑問可以參看 這裡

當使用者訪問網站時,你可以建立一個名為userId的cookie,用js生成一個32+的唯一值作為它的值,使用這對值來標識使用者,關聯使用者行為,舉個?:

以後就可以使用userId來實現使用者追蹤,方便後續的資料分析。建議將過期時間設定的大一點,以便持久分析跟蹤使用者行為。但是隨著網際網路的發展,裝置的限制、使用者隱私意識的提高,很多時候cookie會被禁用,所以這種方式顯得不是那麼穩了。我們急需一種替代方案的出現

2. 方案二 canvas

隨著h5規範的推進,越來越多的瀏覽器支援 canvas 標籤,使得我們可以利用它創造出一種新的使用者追蹤方案。 但是why?how?

先說這種方案的原理:

  • 瀏覽器不同、核心不同,繪製出來的圖片各不相同且唯一
  • 不同的作業系統使用了不同的設定和演算法來進行畫素渲染操作

主要利用這些差異來區分不同使用者

再說一下具體做法

使用的是 canvas 的一個神奇方法—-toDataURL([type, encoderOptions])。這個方法返回繪畫內容的data URL(base 64形式),我們可以利用這個返回值,擷取作為CRC校驗的最後32位來作為使用者的唯一標識。

在瞭解了以上資訊之後,我們來舉個?:

同一個瀏覽器隱身,正常兩種模式執行結果

追蹤使用者?只知道cookie可不夠

對照一下cookie方案,總結一下canvas方案的優缺點

優點

  • html5 canvas技術被所有主流瀏覽器支援,可以在PC、平板、手機上使用
  • 基本上是無法遮蔽的

缺點:

  • 用於是無法遮蔽的,所以你的行為相當於公開的
  • canvas方案跟裝置、系統、瀏覽器有很大的相關性。唯一性不能保證而且會隨著系統、瀏覽器更新而變化,暫且算個方案吧 (關於它的唯一性問題,您可以通過使用相近的系統版本、瀏覽器版本去驗證)

基於缺點,canvas指紋只能作為判斷使用者唯一性的參考。不能完全滿足我們的需求。

3.方案三:Fingerprintjs

為了表示尊敬,這裡先貼出Fingerprintjs github。 它是一個純用javascript、沒有依賴關係的瀏覽器指紋庫,壓縮之後只有1.2k,準確率達到94%。它通過收集使用者ua、螢幕資料、語言、外掛、時區、canvas指紋等資料生成一個使用者標識追蹤使用者(預設使用 Murmur Hash 演算法返回一個32位整數)

上程式碼截圖直觀呈現收集的資料

追蹤使用者?只知道cookie可不夠

優點

  • 包含多種因素,重複率很低

缺點

  • 正是因為包含的因素很多,使用者的一些行為就可以改變標識,很容易失去之前跟蹤的使用者(例如:外掛解除安裝、安裝,系統升級等都可能會影響)

貌似還是不能滿足日益增長的需求啊

4.方案四:Fingerprintjs2

Fingerprintjs2 github ,這個是FingerprintJS的升級版。Fingerprintjs是在2012年開發的,現在無法在不降低相容性的情況下對其進行改進,所以有了Fingerprintjs2。

這個專案收集了更多的資料,並且所有資料都是可配置的,你可以僅挑選需要的選項或者全部啟用它們,而且還特別貼心的“照顧”了IE,QQ,百度等NB瀏覽器

來看看它所收集的資料吧,真是多啊

追蹤使用者?只知道cookie可不夠

由於是二代產物,缺點已經很少了。再結合cookie絕對是無敵的存在。

講了這麼多,總覺得很遙遠,來一個已經開始使用這項技術的網站—-火幣。 看看它的請求,除了token還帶了什麼你就知道了

好了,這就是我關於使用者追蹤的看法,希望可以幫到你

未經本人允許,不得轉載。文章有疏漏淺薄之處,請各位大神斧正

相關文章