我在codeigniter中有一个控制器,由UI从Ajax调用,在UI的正常操作中,每件事都很好,这就是脚本中发生的事情,这只是一个不真实的演示代码(只是想表明发生了什么) ):
$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
在2个普通的UI调用中(彼此之后称为1):
但是,一些垃圾邮件发送者/黑客使用一些机器人或其他任何东西来非常快地调用这个控制器。例如,假设此脚本立即被调用2次(例如小于200ms):
你有什么方法可以防止这种快速通话吗?例如,限制用户在每次通话之间有1s的差距?
答案 0 :(得分:0)
使用您选择的锁定。
一些可能性(还有更多):
filesystem:在临时目录中创建一个名为lockfile_uid的文件,其中uid是唯一的用户ID。 在开始任何交易之前,请检查此文件是否存在(如果存在),不执行任何操作或创建错误。 如果它不存在,则在脚本启动时创建文件,并在完成后将其删除。
数据库:使用uid创建一个具有相同目的的表。与上述逻辑相同