我對其進行了設置,以便每次查看產品時都會在數據庫表daily_product_stats
中更新一個值。它應該只計算每個產品每個會話一次的觀看次數。所以要看看今天看到產品435有多少次了,我們可以很容易地做到這一點,並很容易地看到今天看到的產品最多。每天在追蹤獨特產品視圖時遇到問題
但是我開始注意到奇怪的結果,就像產品2324在上午9點看到的最多36次。我懷疑是不對的,因爲那不是一個非常受歡迎的產品。
所以我決定也用ip跟蹤每個單獨的視圖,以確保每個視圖都是唯一的。所以每次我更新daily_product_stats
我用IP插入一個新的行到product_ip_tracking
。
所以我做了幾分鐘,結果變得陌生。
首先,這裏是做跟蹤頁面上的代碼:
include_once("php/packages/pdomanager/PDOManager.php");
$pdo = PDOManager::getConnection();
$product_stat_qry = '
INSERT INTO daily_product_stats
SET product_stat = 1, product_id = :pid, first_entry = :date
ON DUPLICATE KEY UPDATE product_stat = product_stat+1
';
// Update temp stat table
$product_ip_tracking_qry = '
INSERT INTO product_ip_tracking
SET product_id = :pid, date = :date, user_ip = :ip
';
$stat_data = array(
"pid" => $_GET['pid'],
"date" => date('Ymd')
);
$track_data = $stat_data;
$track_data["ip"] = $_SERVER['REMOTE_ADDR'];
$stat_sth = $pdo->prepare($product_stat_qry);
$track_sth = $pdo->prepare($product_ip_tracking_qry);
if(!isset($_SESSION['daily_product_stats'][$_GET['pid']]))
{ // only update once per person per session
$stat_sth->execute($stat_data);
$track_sth->execute($track_data);
$_SESSION['daily_product_stats'][$_GET['pid']] = 1;
}
望着那得到執行一起的2個不同的查詢,你應該能夠假設,無論product_stat是一個PRODUCT_ID在daily_product_stats表上,product_ip_tracking表上的相同product_id應該有很多行。
所以我讓它運行幾分鐘,然後我跑了數據庫的查詢:
SELECT product_id, COUNT(user_ip) AS times, user_ip, DATE
FROM `product_ip_tracking`
GROUP BY user_ip
ORDER BY times DESC , product_id
,我發現的product_id 8151被視爲當今84倍來自同一IP地址66.249.65.123
。我認爲我的代碼應該防止同一個IP被每天跟蹤超過一次。我做了一些關於IP的研究,它看起來最有可能是一個谷歌機器人,所以我想也許SESSIONS不能設置機器人,所以這就是爲什麼它被越來越多的跟蹤...
因此,我期望查看product_id 8151的daily_product_stats
表,並將其product_stat設爲84.不是,它僅爲2.我覺得這非常奇怪,因爲我不明白這是如何可能的。我不確定這裏發生了什麼。
有沒有人有任何想法?
您是否正確設置了robots.txt文件以防止漫遊器? – 2010-11-04 17:40:55
@McWafflestix,我想要索引頁面,我只是不想將它們作爲訪問進行跟蹤。我想我只需要弄清楚用戶是否是機器人,如果是的話就不跟蹤它的訪問。 – 2010-11-04 18:03:03