2012-07-13 78 views
0

我活躍了一天的網站。內頁我haw功能MySQL訪問=訪問+1,凝視行爲

public function visit_update($link){ 
    $query = mysql_query("UPDATE user SET visit = visit + 1 WHERE link = \"$link\" "); 
} 

每個用戶都有一個獨特的鏈接。由於測試(我目前正在測試頁面),我只有一個活躍用戶。

昨晚爲一個活躍的用戶就被計入數據庫50人次。今天,當我檢查它時,有560次訪問。我也激活了一個谷歌分析,並且在那裏有50個訪問者和3個訪問者,因爲我正在3個不同的探索者中進行測試。

功能DOS不再重複了自我,只計算不屬於網頁的業主遊客。這怎麼可能?

更新:

我去陣痛原木,並發現那位指出,在訪問我的網站通宵兩個IP地址(66.249.66.87和66.249.72.210),他們是來自谷歌。如何區分真正的Web瀏覽器和PHP中的虛擬機器人?那可能嗎 ?

+2

無法在您調用此方法的上下文中沒有代碼的情況下說。但是,可以說你要調用560次,要麼是因爲錯誤的循環或分支邏輯,要麼是因爲錯誤的重寫規則,或者其他原因。 – 2012-07-13 11:27:39

+0

另外,不要依靠Google Analytics(分析)來確定腳本被調用的次數。 GA做了很多事情來限制它通過重定向等方式註冊的次數。相反,您必須直接查看您的網絡日誌。 – 2012-07-13 11:30:07

+0

谷歌機器人有可能檢查頁面,但沒有顯示在分析中?我如何阻止他們更新訪問? – munge83 2012-07-13 11:30:25

回答

1

您可以通過查看訪問瀏覽器的用戶代理最網絡爬蟲表明它們是一個履帶式爬行檢測。爬行者檢測代碼的一個例子可以在here找到。

0

你應該更新的網站訪問數前檢查用戶會話。

public function visit_update($link){ 
     if(!empty($_SESSION['user_id']) 
     { 
      $query = mysql_query("UPDATE user SET visit = visit + 1 WHERE link = \"$link\" "); 
     } 
} 

這將只爲您的網站活躍會員更新訪問計數。

+0

該頁面必須是公開的,並計算那些在該特定頁面的所有者中沒有被凍結的人。 – munge83 2012-07-13 11:40:31

0

,你可以防止與更新值過於頻繁:

UPDATE user 
SET visit = visit+1, last_visit = CURDATE() 
WHERE link = $link AND last_visit < CURDATE() - INTERVAL 30 MIN 
+0

然後我不會真正的遊客數。我需要知道什麼時候機器人會檢查頁面和真實瀏覽器。 – munge83 2012-07-13 12:01:18