防止快速的ajax呼叫

时间:2017-12-05 14:41:15

标签: php ajax

我有一个非常简单的游戏,用户点击一个通过ajax调用某些php函数的按钮。 php函数记录调用并减少用户单击按钮1的能力。

如果用户垃圾邮件点击按钮或强制调用php函数,那么用户可以在1分钟内运行php函数数百次。

有办法阻止这个吗?

简单的服务器端代码,每隔1500毫秒限制一次调用,或者结果不是:)

$user = Utils::getUser();
$now = round(microtime(true) * 1000);
// run spin
if($user){
    $dif = $now - $user->last_spin;
    if($user->spins > 0 && $dif > 1500){
        $user->last_spin = $now;
        $user->decrement('spins');
        $user->increment('spin_count');
        $user->save();

        //do stuff
     }
 }

1 个答案:

答案 0 :(得分:0)

对于每个请求,将microtime存储在会话中并在执行php代码之前检查该会话:

if(!isset($_SESSION)) session_start();
if(!isset($_SESSION['ajax_call']) || $_SERVER['REQUEST_TIME_FLOAT'] >($_SESSION['ajax_call']+1.5)){
  //ok, your code to run
}
$_SESSION['ajax_call'] = $_SERVER['REQUEST_TIME_FLOAT'];