如何限制每个用户的表单提交率

时间:2013-05-04 21:41:10

标签: php database forms api throttling

我试图将form's提交率限制为每用户每120秒一次。

我在考虑使用$_SESSION变量,但我不确定它是如何工作的,只能删除cookie。我猜一个$_SESSION变量可以由一个直观的用户通过logging out然后重新进行处理。

我现在正在理论化,所以我没有代码。

如何解决我的问题?

编辑 -

用户经常查询的原因是因为它是一个项目和动物数据库。我需要将用户查询速度降低到可接受的速度,因为超过10个查询/分钟的速率,否则应用程序可能会被“禁止”或被拒绝大约一个小时。

1 个答案:

答案 0 :(得分:4)

$_SESSION$_COOKIE变量可以被用户删除,因此被他们滥用。您需要将提交存储在服务器上的某个位置。也许与MySQL。然后在处理表单之前进行检查。

这样的东西
SELECT COUNT(*) attempts, MAX(submit_time) last
FROM form_submits
WHERE user_id = ?
AND submit_time > NOW - INTERVAL 2 MINUTE

然后

if ($row['attempts'] > 0) {

    echo "You must wait " . (time() - strtotime($row['last'])) . " seconds before you can submit this form again.";
    return;
}