沒穿方服

封存

顯示╱隱藏內文

2008-06-30: 修改為不限 blogspot 專用,請參考新版 bookmarklet

官方說明的具體步驟中,首先的 <body onLoad="javascript pageTracker._setVar('test_value');"> 跟後面「設定篩選器」看起來似乎沒關聯:

「無報告」原文推測為 no_report(不知道哪來的)

請注意「篩選器模式」的值是怪異的「無報告」,換成英文版一看:

英文的 Filter Patterm: test_value

變成 test_value 了 …… 跟 pageTracker._setVar('test_value'); 設的值吻合 —— 所以是翻譯沒做好啊。


實際上 pageTracker._setVar('test_value'); 會在電腦上儲存一個 __utmv=123456789.test_value 的 cookie,其中 123456789 每個網站都不一樣。一旦訪客電腦裡有這個 cookie,在 Google Analytics 的「訪客 - 使用者定義」就會出現:

test_value 出現了

然後設定「篩選器模式」為 test_value,該報告就會被排除,不再出現。

如此一來,具體流程「建立會設定 cookie 的網頁 → 造訪該網頁以設定 cookie → 設定篩選器排除具有該 cookie 的電腦」應該很清楚了。


還沒完,blogspot 使用者還有問題:要在哪建立新網頁?

新網頁需要在 body onLoad 動手腳,而且不能讓一般訪客看到(有看到就會被下 cookie 而遭排除)—— 很麻煩。

所以我想改用 bookmarklet 的方式,內容就是找到 pageTracker,請他 ._setVar 即可。原始碼拆開如下:

javascript:
if(pageTracker) {
  var v=prompt(%22請輸入要用於「篩選器模式」的字串:%22,%22test_value%22);
  if(v!=null) {
    pageTracker._setVar(v);alert(%22已設定 cookie: %22+v);
  }
}
void 1

將 bookmarklet 加進書籤便可使用 → 設定排除用的 Cookie (Google Analytics)

完整流程:

  1. 將前述 bookmarklet 加進書籤列。
  2. 打開網站的首頁,然後點前述 bookmarklet,應該會跳出對話框:

    對話框內容
    (如果沒反應,就是找不到 pageTracker 而發生錯誤,不會有任何效果)

  3. 填一個字串進去。不一定要填 test_value
  4. 前往 Google Analytics 設定篩選器,「篩選器模式」填剛才回答的字串。
    我的設定長這樣,請別連名字都照抄:

    篩選器設定

  5. 別忘了把篩選器套用至網站設定檔。

這樣就完成了,我測了兩天,流量有正確尷尬下去,所以應該是有效的。

CodeIgniter 社群的 Session library 數量很多,而且越來越多 …… 之前我選用 OB Session 不料沒多久作者便離開 CI 轉乘 Kohana,害我現在想換 lib 又不曉得要換哪支了。

  session API cookie 內容 資料庫 已應用於
CI_session CI   所有資料 選用  
DB Session CI 獨立 (1.5) SID 必須 auth, FreakAuth
OB Session CI 取代 (1.5) SID (db) 選用  
NG Session CI 取代 (1.6) SID (db) 選用  
PHPSession PHP 獨立 (無) SID    
Native Session PHP 取代 (1.5) SID   sentry
RA session PHP 獨立 (1.5) SID   RA Auth
KNDB Session PHP 取代 (1.6) SID 選用  
※ 非官方資料,2008-04-03 製表。詳細如下述:
  • session

    CI_session 會建立自己的 session 資料(而非使用 PHP 既有的 $_SESSION 變數),瀏覽器必須啟用 cookie,而且會失去 $_SESSION 的某些特徵(後述)。這邊表格填 CI 就表示使用 CI 的 session,填 PHP 則是使用 PHP 的 $_SESSION。

  • API

    獨立表示單獨的 library,例如 DB Session 要以 $this->db_session 存取;取代表示直接覆蓋 CI 的 Session 類別,所以程式寫法除了新增功能(例如 flashdata)之外沒有改變。

    後面加註的是最接近的 CI 版本號,由於 CI 1.6 才正式新增 flashdata 功能和 sess_time_to_update(重新產生 session id)選項,所以舊的 lib 使用前可能需要修改才會與 CI_session 一致。註:即使版本相符,還是要留意選項歧義,例如 OB Session 的 session_expiration 設為 0 有特殊意義。

  • cookie 內容

    一般 session 只會把 SID (session id) 存進 cookie,但是 CI_session 會把所有資料都存進去,拿到 cookie 的壞人就有機會解出資料內容。

    表格填 SID 表示只會把 SID 放進 cookie;填 SID (db) 表示若用資料庫儲存資料,cookie 內容就只會放 SID(若沒資料庫,還是會全放 cookie)。

    另外 PHP 的 $_SESSION 在沒有 cookie 支援時仍可以用 URL 來傳 SID,只是這邊的 lib 除了 PHPSesson 在原始碼好像沒看到之外,都還是設計為需要 cookie 支援的。即使可以使用基於 URL(禁用 cookie)的 session,CodeIgniter 也要稍微修改才能用網址傳 SID 吧。

  • 資料庫

    把 session 資料存在資料庫。CI_session 僅儲存 SID, ip_address 等資料,以用於驗證;其他 lib 會更進一步將 session->set_userdata 設的資料存入名為 session_data 的 text 欄位。

    另外,雖然只有 KNDB Session 提供類似標準 CI 的選用資料庫選項,但其他基於 PHP $_SESSION 的 lib 似乎也能由 php.ini 的 session.save_handler 指定用資料庫儲存資料。

  • 已應用於

    記錄該 library 已被包含於哪些認證用的 library

最後看來,這些 lib 主要就分 CI Session 和 PHP Session 兩派,其餘選發佈順序晚的應該就差不多了。