如何使用PHP在浏览器上按“刷新”按钮删除$ _POST变量?
2022-08-30 10:53:49
当我按下浏览器上的“刷新”按钮时,似乎该变量在整个刷新过程中被保留。$_POST
如果我想删除内容,我该怎么办?用于的领域没有帮助。$_POST
unset
$_POST
帮助?谢谢!
当我按下浏览器上的“刷新”按钮时,似乎该变量在整个刷新过程中被保留。$_POST
如果我想删除内容,我该怎么办?用于的领域没有帮助。$_POST
unset
$_POST
帮助?谢谢!
请求标头包含一些 POST 数据。无论您做什么,当您重新加载页面时,都会再次发送请求。
简单的解决方案是重定向到一个新的(如果不相同)页面。这种模式在Web应用程序中非常常见,称为Post/Redirect/Get。所有表单通常都执行POST,如果成功,则应执行重定向。
尝试尽可能多地将视图脚本(主要是 html)与控制器脚本(业务逻辑和内容)分开(在不同的文件中)。通过这种方式,您将始终将数据发布到单独的控制器脚本,然后重定向回视图脚本,该脚本在呈现时,请求标头中将不包含 POST 数据。
为了防止用户刷新页面或按后退按钮并重新提交表单,我使用以下简洁的小技巧。
<?php
if (!isset($_SESSION)) {
session_start();
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$_SESSION['postdata'] = $_POST;
unset($_POST);
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
// This code can be used anywhere you redirect your user to using the header("Location: ...")
if (array_key_exists('postdata', $_SESSION)) {
// Handle your submitted form here using the $_SESSION['postdata'] instead of $_POST
// After using the postdata, don't forget to unset/clear it
unset($_SESSION['postdata']);
}
?>
POST 数据现在位于会话中,用户可以根据需要刷新任意数量。它将不再对您的代码产生影响。
<!-- Demo after submitting -->
<?php if (array_key_exists('postdata', $_SESSION)): ?>
The name you entered was <?= $_SESSION['postdata']['name']; ?>.
<!-- As specified above, clear the postdata from the session -->
<?php unset($_SESSION['postdata']); ?>
<?php endif; ?>
<!-- Demo form -->
<?php if (!isset($_SESSION['postdata'])): ?>
<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>">
Name: <input type="text" name="name" /><br />
<input type="submit" value="Submit" />
</form>
<?php endif; ?>