仅使用$ _POST信息一次

时间:2011-11-17 17:03:43

标签: php

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

我最初的想法是设置一个会话变量并将该功能计时一段时间。问题是,在设定的时间段结束后,可以再次访问该功能。

欢迎更好的想法!

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

这个很容易实现。

您需要做的就是:

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

然后,发送一个LOCATION标题以将浏览器重定向到一个新页面(将由GET重新检索)这将破坏浏览器的重新发布时的重新发布行为

答案 2 :(得分:1)

您可以重定向到其他页面,例如

header("Location: index.php");

答案 3 :(得分:0)

怎么样:

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

2)进行myformpage_submit.php形式的动作

3)在myformpage_submit.php中执行您需要处理的所有信息,例如插入数据库。

4)完成后,将浏览器定向到另一个页面,例如nicework.php

这应该按照你的意愿处理它们。

答案 4 :(得分:0)

为避免用户刷新页面并访问信息, 您可以使用以下形式的令牌方法:

<?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>