2011-03-31 18 views
0

嘿,我已經有一個查看計數器編碼,但我需要幫助,防止人們刷新和刷新,以添加更多的意見。通常情況下,我會標記這存儲的IP,頁面名稱和日期在一個SQL表中查看在PHP中,我會運行搜索,看看是否有人用該IP在24小時內查看過網頁,但我運行的網站是主要是在學校操作,我希望計算機實驗室中的每臺計算機在看到該頁面時都可以視爲一個視圖。再次,我可以使用Cookie,但我的服務器沒有正確發送餅乾。它在我的測試服務器上正常工作,但不在專用的Web託管服務器上。有沒有其他的方法來防止垃圾郵件?PHP查看計數器垃圾郵件防範

繼承人我的代碼

function connect() { 

$domain = $_SERVER['HTTP_HOST']; 

$dbhost = 'censored'; 
$dbname = 'censored'; 
$dbuser = 'censored'; 
$dbpass ='censored'; 

if ($domain == 'localhost'){ 
$dbhost = 'localhost'; 
$dbname = 'db1'; 
$dbuser = 'root'; 
$dbpass =''; 
} 

$con = mysql_connect($dbhost, $dbuser, $dbpass); 
if(!$con){ 
    trigger_error("Problem Connecting to the MySQL Server."); 
} 
$db = mysql_select_db($dbname, $con); 
    if(!$db){ 
    trigger_error("Problem finding the Database!"); 
} 
return $con; 
} 


function fetchdata($qry){ 
connect(); 
$result = mysql_query($qry); 
return $fetch = mysql_fetch_assoc($result); 
} 



    function addcounter($id) { 
connect(); 
$counter = fetchdata("SELECT * FROM counter WHERE `path` = '$id';"); 
$counter = $counter['counter']; 
if(isset($_COOKIE["counter_".$id.""])){ 
}else{ 
if ($counter === NULL) { 
    mysql_query("INSERT INTO counter VALUES (0, '" .$id. "');"); 
} 
echo "<!-- submitting query -->"; 
mysql_query("UPDATE counter SET counter = `counter`+ 1 WHERE path = ".$id."") or die ('failupdate'); 
setcookie("counter_$id", "Playcookie_".$id.""); 
} 
} 
+0

你是什麼意思「我的服務器沒有正確發送餅乾」?你是否檢查過「Set-Cookie」頭的響應頭?如果客戶端沒有收到cookie,可能是因爲它錯誤(例如:setcookie調用之前的輸出)。因爲最好的方法確實是一個cookie ... – netcoder 2011-03-31 00:44:47

+0

餅乾在測試服務器上工作。不在現場? – Alice 2011-04-08 06:03:36

回答

1

如果您不能使用用戶的IP地址(大概是因爲他們是在NAT後面?),你可以不使用cookies,有真的沒有什麼可以做。

可以嘗試與用戶代理字符串(可能是在實驗室中不同計算機之間的不同)一起使用的IP,但是這將是既慢,當然從保證遠的工作。

除此之外,我認爲你沒有選擇。