Эй, у меня уже есть закодированный счетчик просмотров, но мне нужна помощь, чтобы люди не могли просто обновлять и обновлять, чтобы добавить больше просмотров. Обычно я бы отметил это сохранением IP-адреса, имени страницы и даты просмотра в таблице SQL, где в php я бы запустил поиск, чтобы узнать, просматривал ли кто-то с этим IP-адресом страницу в течение 24 часов, но я запускаю веб-сайт, который в основном работает в школах, и я хочу, чтобы каждый компьютер в компьютерном классе считался просмотром, когда они видят страницу. Опять же, я мог бы использовать файлы cookie, но мой сервер неправильно отправляет файлы cookie. Он отлично работает на моем тестовом сервере, но не на выделенном сервере веб-хостинга. Есть ли другой способ защиты от спама?

Вот мой код

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
Alice 31 Мар 2011 в 04:33
Что вы имеете в виду, «мой сервер неправильно отправляет файлы cookie»? Вы проверили заголовки ответа на наличие заголовка Set-Cookie? Если куки не получены клиентом, это, вероятно, потому, что это сделано неправильно (например: вывод перед вызовом setcookie). Потому что лучший способ - это действительно печенье...
 – 
netcoder
31 Мар 2011 в 04:44
Куки работали на тестовом сервере. Не в прямом эфире?
 – 
Alice
8 Апр 2011 в 10:03

1 ответ

Если вы не можете использовать IP-адрес пользователя (предположительно, потому что он находится за NAT?) и вы не можете использовать файлы cookie, вы мало что можете сделать.

Вы можете попробовать использовать IP-адрес вместе со строкой пользовательского агента (которая может отличаться на разных компьютерах в лаборатории), но это будет и медленнее, и, конечно, далеко. от гарантированно до работы.

Кроме этого, я думаю, у вас нет вариантов.

1
Jon 31 Мар 2011 в 04:45