我花了两个多小时在网上搜寻,试图解决这个问题。我试图以超过60秒的速度停止多个表单提交。这是我正在使用的。
session_start();
if (!isset($_SESSION['last_submit']))
$_SESSION['last_submit'] = time();
if (time()-$_SESSION['last_submit'] < 60)
die('Post limit exceeded. Please wait at least 60 seconds');
else
$_SESION['last_submit'] = time();
我在网站上发现了这一点,但是到目前为止还没能找到其他任何东西。我在开头的页面上有一些代码,用以前的页面POST结果进行数据库查询。我需要将$last_submit
设置为某个值吗?任何帮助表示赞赏。
答案 0 :(得分:7)
你有两个问题。首先,在第一次执行时,您将会话值设置为time()
,因此第一次尝试将始终产生超出限制的错误。第二个问题是$_SESION
中有拼写错误。
尝试:
session_start();
if (isset($_SESSION['last_submit']) && time()-$_SESSION['last_submit'] < 60)
die('Post limit exceeded. Please wait at least 60 seconds');
else
$_SESSION['last_submit'] = time();
另外应该注意的是,这不是万无一失的,因为用户可以拒绝cookie或删除会话cookie,以绕过你的支票。
答案 1 :(得分:2)
最后一句话:
$_SESION['last_submit'] = time();
应该是:
$_SESSION['last_submit'] = time();
你忘了 S ......
这段代码也 die 意味着将执行die
语句。
替代:
if (time() - ( isset($_SESSION['last_submit'])?$_SESSION['last_submit']:0 )< 60)
die('Post limit exceeded. Please wait at least 60 seconds');
// update the session
$_SESSION['last_submit'] = time();