2011-11-18 80 views
1

有沒有簡單的方法可以監控用戶瀏覽頁面的時間?監控頁面查看次數

谷歌Analytics(分析)使用此功能可讓您查看您的網站訪問者在特定頁面上停留的時間。像這樣的東西能用PHP或JavaScript重現嗎?

回答

2

是的,這很容易。只需在頁面加載時啓動計時器,並在用戶離開頁面時將其發送給某個服務器腳本進行記錄。

要激發頁面離開事件閱讀here

實例的客戶端代碼:在your-tracking-server.com/track.php

<html> 
... 
<script> 
var visit_start_time_ms = (new Date).getTime(); 
window.onbeforeunload = function() { 
    var visit_time = (new Date).getTime() - visit_start_time_ms; 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("GET","http://your-tracking-server.com/track.php?track_url=...&visit_time=" + visit_time,true); 
    xmlhttp.send(); 
}; 
</script> 
... 
</html> 

你的服務器端腳本:

... 
mysql_query('INSERT INTO track_visit_time (url, time) VALUES ("'.myescape($_GET['track_url']).'", '.float($_GET['visit_time']).')'); 
... 

記住,客戶端不測試而不是交叉瀏覽器。服務器端使用不推薦使用的函數mysql_query。

+0

小心顯示你的myescape()函數代碼? 5美元表示您可以以某種形式開放SQL注入。 – Brad

+0

這是我的想象功能。我使用PDO並在我所有的項目中準備了語​​句。感謝專心。 – Oroboros102

0

我想你可以嘗試使用window.onbeforeunload方法來觸發ajax調用。加載頁面時,記錄時間,卸載時間,使用ajax將已用時間發送到服務器。該頁面顯然永遠不會看到迴應,但無論如何這並不重要。

正如布拉德指出的那樣,這有點不可靠。另一種方法是每隔幾秒更新一次服務器的時間。您應該爲經過的時間添加一半的時間間隔,以平均計算上次更新和離開用戶之間的時間。例如,如果每10秒更新一次,而最後一次更新的時間爲40秒,則假設他們有45秒。這涵蓋了40.0秒到49.999秒之間沒有被記錄的情況。

+0

小心,這樣的請求很少起作用。 – Brad

+0

@Brad我目前正在調查這件事,看看我能否改進答案。 – Tesserex

+0

@布拉德:你爲什麼這麼說? 'onbeforeunload'事件不可靠嗎? – xbonez

1

這樣做的一種常見方法是簡單地測量一個頁面視圖和下一個頁面視圖之間的時間。雖然有很多「陷阱」!

  • 你不知道的時候加載的最後一頁
  • 你不知道時間反彈
  • 問題的發生是多標籤並沒有什麼
  • 不是有人留在您的網頁上4個小時,還是關閉了瀏覽器然後回來?

爲了解決這些問題,另一種常見的方法是輪詢服務器。您可以通過長輪詢(連接保持打開狀態,一分鐘左右沒有數據傳輸,然後立即建立另一個連接)或每5秒左右重複點擊一次到您的服務器來完成此操作。我建議使用長輪詢方法,因爲它的帶寬密集程度要低得多。

0

您可以在控制器環境中執行此操作,如果用戶在特定網頁(和位置)上查看用戶眼睛,那麼該用戶眼睛會被跟蹤。如果您僅將瀏覽器內的跟蹤用於常見的事情,例如用戶正在接聽電話或切換到其他選項卡,以及在瀏覽器打開時我們每天所做的所有事情,那麼這通常可用於消除問題。