Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向php脚本发送多个快速post请求_Php_Ajax_.htaccess_Codeigniter_Security - Fatal编程技术网

如何向php脚本发送多个快速post请求

如何向php脚本发送多个快速post请求,php,ajax,.htaccess,codeigniter,security,Php,Ajax,.htaccess,Codeigniter,Security,我在codeigniter中有一个控制器,由Ajax从UI调用,在UI的正常操作中,一切都很好,这就是脚本中发生的事情,这只是一个演示代码,不是真实的(只是想展示发生了什么): 在2个正常的UI调用中(每个调用后1秒): 在第一次调用中,$bank['amount']是1000(例如)。增加了 到用户的余额,并设置为0 在第二次调用中,$bank['amount']是0,因为它在上一次调用中被设置为0 调用,因此余额中没有添加任何内容 但是,一些垃圾邮件发送者/黑客使用一些机器人或其他任何东

我在codeigniter中有一个控制器,由Ajax从UI调用,在UI的正常操作中,一切都很好,这就是脚本中发生的事情,这只是一个演示代码,不是真实的(只是想展示发生了什么):

在2个正常的UI调用中(每个调用后1秒):

  • 在第一次调用中,$bank['amount']是1000(例如)。增加了 到用户的余额,并设置为0
  • 在第二次调用中,$bank['amount']是0,因为它在上一次调用中被设置为0 调用,因此余额中没有添加任何内容
但是,一些垃圾邮件发送者/黑客使用一些机器人或其他任何东西来快速调用此控制器。例如,假设立即调用此脚本2次(例如小于200ms):

  • 在第一次调用中,$bank['amount']是1000(例如)。增加了 到用户的余额,并设置为0
  • 在第二次调用中,$bank['amount']不是0,因为第一次调用仍在工作,并且没有将$bank['amount']设置为0,因为在第二次调用之前没有足够的时间

你有什么方法来防止这种快速呼叫吗?例如,限制用户在每次通话之间有1s的间隔?

使用您选择的一些锁定

一些可能性(还有更多的可能性):

  • 文件系统:在一个临时目录中创建一个名为lockfile\u uid的文件,其中uid是唯一的用户标识。 在启动任何事务之前,请检查此文件是否存在,如果存在,请不要执行任何操作或创建错误。 如果该文件不存在,则在脚本开始时创建该文件,并在脚本结束时将其删除

  • 数据库:创建一个与uid用途相同的表。逻辑同上


  • 这就是数据库事务的用途。。。
    $uid=$_POST['uid'];
    $id=$_POST['id'];
    $bank=load_bank($uid,$id); // Load Bank From MySql DB
    
    add_to_user_balance($uid,$bank['amount']); // "Add" the bank's amount to user balance in DB
    
    zero_bank_amount($uid,$id); // Reset the bank amount to zero