好的,基本上我有一个用户提交的表单,但我需要一个“冷却计时器”,以便用户在给定的时间内不能再次提交它。我无法找到如何在 php 中执行此操作,如果可能的话,这将是首选。
提前致谢。
您可以将上次成功提交的时间戳存储在数据库(例如:MySQL)中,并在每次提交时检查数据库中的值 + 冷却时间是否小于或等于当前时间戳。你可以在 PHP 中使用time()
.
您必须为此使用会话!
当用户提交表单时,您必须将时间戳添加到他的会话中:
$_SESSION['last_submit'] = time();
现在,当他再次提交表单时,只需比较时间戳,例如:
if(isset($_SESSION['last_submit']) && ((time() - $_SESSION['last_submit']) < 60 * 5)) { //time in seconds! 60 seconds = 1 Minute and 1 minute * 5 = 5 minutes!
die('Wait a few');
}
$_SESSION['last_submit'] = time();
// regular form processing here!
我们在这里要做的是首先检查:是否设置了先前的时间戳?然后如果time() - lastsubmit
少于 5 分钟。如果这些都返回 true,则表单被“提前”提交,我们就干脆死了。如果不是,我们刷新会话的时间戳并继续。
当然不要忘记开始会话!
session_start();
在页面的最顶部!
正如我在评论中读到的(再次感谢!),用户可以使用另一个浏览器或清除 cookie。为了防止这种情况(尽可能好),您还必须考虑 IP。
为此,您必须使用服务器端数据库!将客户端的 IP 连同时间戳一起存储到该数据库中,然后在您的 if 语句中,您不需要从会话中获取时间戳,而是从数据库中获取。使用客户端的 IP 来获取关联。时间戳。