【问题标题】:PHP View Counter Spam PreventionPHP 查看反垃圾邮件预防
【发布时间】:2011-03-31 08:45:38
【问题描述】:

嘿,我已经有一个视图计数器编码,但我需要帮助防止人们只是刷新和刷新以添加更多视图。通常,我会标记这个存储在 SQL 表中查看的 ip、页面名称和日期,在 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."");
}
}

【问题讨论】:

  • “我的服务器没有正确发送 cookie”是什么意思?您是否检查了Set-Cookie 标头的响应标头?如果客户端没有收到 cookie,可能是因为它做错了(例如:setcookie 调用之前的输出)。因为最好的方法确实是 cookie...
  • Cookies 在测试服务器上工作。没有直播?

标签: php mysql cookies


【解决方案1】:

如果您不能使用用户的 IP 地址(大概是因为他们在 NAT 之后?)并且您不能使用 cookie,那么您真的无能为力。

可以尝试将 IP 与用户代理字符串一起使用(在实验室中的不同计算机之间可能不同),但这会更慢而且当然远不能保证工作。

除此之外,我认为您别无选择。

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2014-04-20
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2019-01-23
    • 2011-01-22
    相关资源
    最近更新 更多