重新加载后不允许重新发送POST信息

时间:2014-04-15 19:44:27

标签: php

我有一个表单,一旦提交,结果不应该通过重新加载页面再次复制,我已经尝试分配一个随机密钥,以便当您重新加载页面时,密钥不匹配,你不能复制它但它不起作用:

$bypass = rand(1,999);

if ($_SERVER['REQUEST_METHOD'] === 'POST'){
    if ($_POST['key'] == $bypass) {
        echo'Hello';
    } else {
        echo "invalid key";
    }
} else {
    echo '<form action="test.php" method="post">';
    echo '<input type="hidden" name="key" value="'.$bypass.'" /><input name="submit" type="submit" value="submit" /></form>';
}

上述代码的预期功能是生成一个随机密钥,该密钥仅在您提交表单时才起作用,但如果您通过重新加载页面重新发送表单,但现在可以正常工作,但它不像您提交时那样工作密钥的形式将被更改。我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:5)

执行此操作的标准方法是重定向远离POST端点,以便浏览器执行GET,可以根据需要刷新,而无需重新发送POST数据。

如果你想在POST端点上完成所有操作,那么应该这样做:

session_start();
if (!isset($_SESSION['bypass']) {
    $_SESSION['bypass'] = mt_rand();
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if ($_POST['key'] != $_SESSION['bypass']) {
        echo "Invalid key";
    } else {
        unset($_SESSION['bypass']);
        echo "Hello";
    }
} else {
    echo '<form action="test.php" method="post">';
    echo '<input type="hidden" name="key" value="'.$_SESSION['bypass'].'" /><input name="submit" type="submit" value="submit" /></form>';
}