2012-05-31 56 views
1

我已將它設置爲我在每個視圖中記錄一個名爲question_views的表,因此每個用戶只能計算一次。如何實現未註冊用戶的查看次數?

不過,我有一個問題。現在,當您未登錄時,視圖計數會不斷增加,因爲我無法識別未註冊的人員(或未登錄的人員)。

這是我如何進入用戶到數據庫時,他們查看:

function add_view($user, $question) { 
    $ts = time(); 
    $check = mysql_num_rows(mysql_query("SELECT * FROM question_views WHERE user='$user' AND question_id=$question")); 
    if($check==0) { 
     mysql_query("UPDATE questions SET views=views+1 WHERE qid=$question"); 
     mysql_query("INSERT INTO question_views (user,question_id,date) VALUES ($user,$question,$ts)"); 
    } 
} 

當用戶沒有登錄,$_SESSION['userid'](這是什麼時候被調用的函數傳遞)沒有按」 t甚至存在。

什麼是使觀看計數系統計數每個觀衆只有一次,包括未登記的人的好辦法?

編輯:當然有沒有辦法做到這一點可靠。但有這樣做至少有點好。

+6

沒有辦法可靠地做到這一點。您可以嘗試使用IP地址,會話,cookie或三者的任意組合。但在一天結束的時候,你不可靠。 – Corbin

+0

好的。什麼是雖然downvote?誰低估了它,謝謝花時間解釋。 – Nathan

+0

@Nathan如果你設置了'$ _SESSION ['userid'] ='guest_',它會完全破壞你的系統。 uniqid();'這樣未登錄的用戶被賦予一個訪客用戶ID?當然,人們只需要禁用cookie就可以不斷增加查看次數,但這可能會起作用。 – drew010

回答

3

科爾賓的是正確的。我個人會使用cookie。 IP可以由多人共享,並且會話只會持續到關閉瀏覽器。我認爲cookie是你最好的選擇,但當然,它可以被刪除。只需將生命週期設置爲「永久」或很長的時間間隔。

+0

厲害的解決方案就是所謂的Flash餅乾,因爲他們可以去除後;-) –

+0

再生@Jack這很好,但我是一個全HTML5的傢伙:P計數並不需要準確(它不是它可能是準確的),但每次訪客刷新頁面時也不會增加。我想我會去用餅乾。我打算使用會話變量,因爲它們非常簡單,但Cookie更好。 – Nathan

+0

@Nathan我沒有說「整潔」,我說「nastier」:) –