如何限制一个IP每小时只能提交一次表单

时间:2019-04-14 02:15:49

标签: javascript jquery html css windows-server-2012-r2

我目前正在从事一个Web项目,我想填写一份反馈表。我希望ip只能以例如每次一次的形式发送反馈。 4小时。

如果需要,我可以使用第三方库,但我不想使用它们(jQuery除外)。

如果要查看网站,请访问this link

我曾尝试研究堆栈溢出和其他网站,但找不到结果。我找不到JS / jQuery的方法,主要是PHP

谢谢

2 个答案:

答案 0 :(得分:0)

限制用户执行某项操作的速率最适合在服务器上完成。这就是为什么您找到的大多数示例都在PHP中的原因。这是因为用户可以轻松更改其计算机的功能,因此在服务器上执行此操作更加安全。

如果您真的想限制客户端的费率,那么以下是我的处理方法概述:

在本地存储中有一个变量(有关MDN的更多信息),用于跟踪用户上次提交反馈的时间。

然后,将事件侦听器添加到表单Submit事件。在此事件侦听器中,如果自用户上次提交表单以来少于4个小时,则阻止表单提交。您可以使用ev.preventdefault进行此操作。另外,请记住要更新您的变量。

答案 1 :(得分:0)

如果您正在使用数据库,则可以使用以下结构。有一个数据库表(feedbackTable)和至少3列(IP,feedbackText,feedbackTime-发送反馈的时间戳)。

提交用户表单后,获取您需要的变量...

$ip=$_POST["ip"];
$feedbackText=$_POST["feedbackText"];

使用查询中的信息...

$qry = "SELECT * FROM feedbackTable WHERE IP=:ip AND feedbackTime BETWEEN DATE_SUB(NOW(), INTERVAL 4 HOURS) AND NOW()";
// or NOW()-4 hours ... depends on database and version

执行查询。如果返回0行(对于PHP中的PDO准备的语句使用rowCount()),则可以将反馈文本添加到数据库和/或使用户可见。如果返回1行,请告诉用户他要等到4个小时后才能再次提交反馈。     实际上,最好直到上次提交后的4个小时内才对用户可见该表单。您可以通过使用ajax和jQuery“轮询”来做到这一点(在提交后隐藏表单,然后使用ajax在数据库查询脚本上设置一个间隔-可能是每分钟),当脚本返回时如我们4所示,显示再次填写表格)...但这不是必需的。如果用户花一些时间填写反馈,然后您告诉他们您不花时间,那么用户可能会感到有些沮丧。     我不会使用本地存储来节省时间要求,因为用户可以通过多种方式更改该信息。