2014-01-10 99 views
0

我目前使用Redis來存儲每次加載頁面時的查看次數。它工作得很好,但我唯一擔心的是它會被濫用。當用戶在我的網站上登錄時,只有當他們還沒有查看線程時(再次,由Redis跟蹤),視圖計數器纔會更新,從而消除濫用。防止查看次數被濫用的最佳方法

我的問題是與我沒有帳戶的用戶。如果我在每次加載頁面時都讓瀏覽次數更新(如果有人創建了一些內容),那麼他們可以多次註銷並刷新頁面,因爲他們希望使瀏覽次數增加。我的第一個想法是通過會話cookie識別每個非帳戶用戶(我已經跟蹤通過會話cookie登錄的用戶),但是如果有人清除了該cookie,它將再次變得無用。另一個想法是IP地址,但通過動態IP地址,它也不會很可靠。

所以我的問題是,什麼是最可靠的方式來跟蹤未知用戶的查看計數?

+1

您可以根據用戶ip/login登錄cookie。通過這種方式,經過身份驗證的用戶將始終擁有相同的cookie。你可能會錯過一些用戶,如果他們不止一個在IP地址後面(md5)(salt + user | anon + ip) – gawel

+0

是的,看起來這是最簡單的折衷方案。謝謝! – sheppardzw

回答

1

歡迎來到追蹤查看次數的世界!

我讓你介紹一些商業祕密。

你想要的可能是一個像素跟蹤器。

像素跟蹤器是一種服務,它服務1x1像素,除了記錄請求的時間外什麼也不做。所以如果你說你想跟蹤某人訪問一個線程,你可以做一個sha512的線程名稱散列,sha512(thread_name),並得到一個散列。然後用這個哈希要求使用你的Web服務器中的像素爲,下次呈現頁面時如下

/px/<sha512hash>.gif 

然後你就可以將這個請求到數據庫,你SHA512標題,您請求像素,那麼你就會意識到,此用戶已被提供此標題的像素。您忽略該請求,則不會增加查看計數器。

+0

@gawel有一個很好的答案。我寧願折中100%的準確性簡單。奇怪的是,這不會依靠瀏覽器緩存.gif嗎? – sheppardzw

+0

@ d0ctor記錄資源服務器端的請求。 –

+0

我似乎沒有得到它......抱歉哈哈。我記錄資源的請求,假設處理程序是/ viewcount。來自passlib的SHA-512散列每次都是隨機的。即使我每次都是靜態的,這隻會允許一個客人增加櫃檯。如果IP地址不可靠,我如何才能跟蹤每個訪客?我看到的唯一可行的就是爲每個客人提供一個隨機的cookie,並希望他們不會清除它。 – sheppardzw

相關問題