我有一些信息从表单传递,需要使用一次且只需一次。我可以从$ _POST很好地收集它,但我不确定哪种是确保我只能使用它一次的“最佳”方式,即我想避免用户反复按F5并多次访问该功能。
我最初的想法是设置一个会话变量并将该功能计时一段时间。问题是,在设定的时间段结束后,可以再次访问该功能。
欢迎更好的想法!
答案 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>