7

我花了2个多小时在网上搜索试图弄清楚这一点。我正在尝试以超过 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为某个值吗?任何帮助表示赞赏。

4

2 回答 2

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,以绕过您的检查。

于 2012-10-10T08:56:52.537 回答
2

最后的声明:

$_SESION['last_submit'] = time();

应该:

$_SESSION['last_submit'] = time();

你忘了一个S ...

这段代码也将死亡,这意味着该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(); 
于 2012-10-10T08:56:48.760 回答