只使用$_POST信息一次


Using $_POST information only once

我有一些从表单传递的信息,需要使用一次且仅一次。我可以很好地从$_POST中收集它,但我不确定哪是"最好"的方式来确保我只能使用它一次,即我想避免用户重复按F5并多次访问该函数。

我最初的想法是设置一个会话变量,并将函数超时一段时间。这样做的问题是,在设置的周期过后,它们可以再次访问该函数。

欢迎更好的想法!

重定向到另一个页面将足以打破大多数浏览器的重新刷新行为。在表单提交上设置cookie(或者根据您的建议设置会话变量)也可以很好地工作。您可以让表单提交页面再次取消会话变量的设置,这样只有对表单的新访问才允许重新提交表单。

这个很容易实现。

你所需要做的就是:

将您的表单提交到另一个页面,该页面将只处理帖子信息,而不显示任何内容

然后,发送一个LOCATION头来将浏览器重定向到一个新页面(该页面将被GET检索)。这将打破浏览器的重新刷新行为

你可以重定向到其他页面,比如

<>之前标题("位置:index . php");

如何:

1)用表单创建一个页面,例如myformpage.php

2)使表单的动作myformpage_submit.php

3)在myformpage_submit.php做任何你需要做的与发布的信息,如插入到数据库。

4)完成后,将浏览器引导到另一个页面,例如:nice .php

为避免用户刷新页面访问信息,您可以像这样使用token方法:

<?php 
if ( isset($_POST['submit'], $_POST['token']) && ($_POST['token'] === $_SESSION['token']) )
{
    // do something here
}
$_SESSION['token'] = uniqid();
?>

对于

<form method="POST">
    <input type="hidden" name="token" value="<?= $_SESSION['token'] ?>">
    <button name="submit" class="btn btn-success">Submit</button>
</form>