HTML表单 - 每个IP每小时限制为X次

时间:2012-06-07 18:42:51

标签: php mysql

我遇到了问题,我需要接收数据(表单中只有一个字符串,它是收到的名称):

$received_data = $_POST['data'];
$ip = checkip();

和'用户'IP(它不需要cookie或会话,我不能使用它们),我必须将数据(数据和IP)保存在数据库上并允许每小时看5个,但允许看到已经看到的相同,我的意思是存储在数据库中的'数据'可以无限制地看到,但每小时只有5个不同的数据(名称),例如:

可以检查:玛莎,杰克,莉莉,马克和彼得(每小时,下一个小时可以检查其他人或者可能相同 - 取决于用户)。

在同一个小时内可以检查已经检查过的五个名字,但是下一个小时不会检查其他名称。

如果再次检查Martha,Jack和Martha,那么(第二个Martha)就不算数了,因为它已经在同一时间检查过了。

我不知道怎么办,有人能帮帮我吗?

谢谢你们先进,亲切的问候。

2 个答案:

答案 0 :(得分:1)

我会重新考虑使用IP地址。许多组织/ ISP有许多计算机来共享IP地址。

至于每小时只验证5个,您需要存储最后收到的5个数据项的时间戳。如果少于五个则一切正常。

否则检查老大的时间。如果超过1小时,则确定并通过删除最旧的时间戳并将其替换为新的数据库来更新数据库。否则它应该失败。

答案 1 :(得分:1)

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

function maxSavePerHour($data, $ip, $maxSave = 5){

    $data = mysql_real_escape_string($data);

    // Get record matching within last hour
    $res = mysql_query("select * from table where data='$data' and ip='$ip' and lastinsert <= date_sub(NOW(), interval 1 hour)";

     $totalRows = mysql_num_rows($res);

    // If a record was NOT found within last hour matching everything then insert new record.

      // Compare records against max saves
      if($totalRows <= $maxSave){
        $storeData = true;
      }else{
        $storeData = false;
      }  


   if($storeData){
      $res = mysql_query("insert into table set data='$data', ip='$ip'";
      //Add more exception handling here....
    }

}


$ip = getRealIpAddr();
$data = $_POST['data'];

maxSavePerHour($data,$ip);