我有一个表单,一旦提交,结果不应该通过重新加载页面再次复制,我已经尝试分配一个随机密钥,以便当您重新加载页面时,密钥不匹配,你不能复制它但它不起作用:
$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>';
}
上述代码的预期功能是生成一个随机密钥,该密钥仅在您提交表单时才起作用,但如果您通过重新加载页面重新发送表单,但现在可以正常工作,但它不像您提交时那样工作密钥的形式将被更改。我怎样才能解决这个问题?
答案 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>';
}