PHP避免浏览器在页面刷新时重新发布$ _POST?

Pet*_*kov 6 html post refresh

我想知道我可以使用什么技术来避免用户在刷新页面并选择再次提交时两次发布表单?

例如,我在regiter.php中有表单并在register.php中处理它.

第一个我可以在另一个文件,例如处理register_process.php并重定向到register.php,但后来我不得不创造约20个新的网页,并搬迁了大量的代码,我不希望这样的选择.

第二我可以玩headers我不记得确切的技巧,但有一些不好的经验 - 用户在刷新后看到页面上的旧数据...

3我可以将成功重定向到一些dummy.php并从dummy.php跳回到register.php然后即使他们刷新页面浏览器也不会重新发布,但是它不能使用后退按钮并选择重新保护它们发布,我知道我可以过期页面​​,但我发现这令人讨厌的经验,可能是其他用户看到页面过期错误.

第四次为每个表单使用一些独特的"访问键",一旦页面加载,将使用表单发布,一旦使用不能重复使用,但我有点挣扎与该功能的逻辑.知道如何使用密钥而不将其存储在MySQL数据库中,我认为基于时间的连接不是很好,因为有些用户可以在页面打开和表单提交之间花费很长时间.

我需要更多建议如何避免用户再次重新发布表单.

Nie*_*sol 3

尝试这个:

<?php
session_start();
if( strcasecmp($_SERVER['REQUEST_METHOD'],"POST") === 0) {
  $_SESSION['postdata'] = $_POST;
  header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
  exit;
}
if( isset($_SESSION['postdata'])) {
  $_POST = $_SESSION['postdata'];
  unset($_SESSION['postdata']);
}
Run Code Online (Sandbox Code Playgroud)

这基本上会保存 POST 数据并导致浏览器重新请求为 GET 请求。