我正在開發一個有許多產品的網站。對於每個產品,我都想顯示一個計數器,其中包含觀看它的不同用戶的數量。頁面計時器
我面臨的問題是會有用戶登錄而其他用戶沒有登錄,而且這樣做可以避免同一用戶多次增加一個「手錶」。
那麼,解決這個問題的最好方法是什麼?我如何存儲信息?
我正在開發一個有許多產品的網站。對於每個產品,我都想顯示一個計數器,其中包含觀看它的不同用戶的數量。頁面計時器
我面臨的問題是會有用戶登錄而其他用戶沒有登錄,而且這樣做可以避免同一用戶多次增加一個「手錶」。
那麼,解決這個問題的最好方法是什麼?我如何存儲信息?
對於簡單的解決方案,您可以:
你可以,例如,在數據庫中創建一個表watched
像這樣:
------------------------------------------
| ID | PRODUCT_ID | IP | USER_ID |
|----------------------------------------|
| 1 | 22 | 127.0.0.1 | NULL |
------------------------------------------
| 2 | 23 | 127.0.0.1 | 2 |
------------------------------------------
在第一個raw中,這是訪問您的產品頁面22
的未經身份驗證的用戶的示例。
在第二個示例中,它是訪問您的產品頁面的經過身份驗證的用戶。所以你存儲它的IP和它的ID。
感謝這種方法,您可以輕鬆檢查用戶是否訪問過您的產品頁面。在每次訪問時,您只需要通過用戶的ID
來滿足您的數據庫,並且需要感謝php變量$_SERVER['REMOTE_ADDR']
。
祝你好運! :)
這有幾個問題: (1)同一用戶可以更改IP(因爲靜態IP代價昂貴)(2)同一局域網內的多個用戶具有相同的IP但不被視爲多用戶。 – apokryfos
有幾種方法可以繞過這種過程,並且沒有任何可能性來統一每個獨特的用戶。如果你倒退了,請給我們你的答案,我迫不及待地想看到比我更好的提議。 –
這對於非註冊用戶根本無法完成。您可以做的最接近的事情,實際上Web分析服務在實踐中做的是創建一個跟蹤cookie。
在其最簡單的形式,它看起來是這樣的:
<?php
if (isset($_COOKIE["trackingId"])) {
$uid = $_COOKIE["trackingId"];
} else {
$uid = uniqid();
setcookie("trackingId",$uid,2147483647);
}
注意分析網站將嘗試使用它可以唯一地識別用戶如他們收到的硬件功能,屏幕分辨率等
信息創建一個表:
由用戶觀看
productId, userId, trackingId
您可以使用此表來跟蹤誰在看你的產品。普通註冊用戶將被存儲一個userId。未註冊的用戶將與他們的跟蹤ID一起存儲。
這種方法的優點是,即使用戶改變了IP,你也可以在同一個瀏覽器中跟蹤同一用戶。缺點是隻要用戶清除他們的cookies,你就會失去這些信息。
您可以使用類似canvas fingerprinting而不是使用uniqid
來優化您的跟蹤機制,但這裏要實現的一點是,沒有方法可以永久且正確地唯一標識用戶,因爲用戶應該有權不跟蹤。
這樣做沒有百分之百的方法,因爲它都依賴於用戶可能不想提供的客戶端識別。如果您認爲自己的用戶「很友善」,並且不介意被跟蹤,那麼您可以向他們發送一個帶有唯一散列的跟蹤Cookie,以便即使他們未登錄也能識別您的網站。 – apokryfos