当用户点击浏览器的“刷新”按钮时如何避免重复?
例如,我问这个问题,然后单击“发布您的问题”并保留在当前页面中。现在我可以点击浏览器的“刷新”按钮来查看新的答案。但我发现在我的网站上,如果我点击“刷新”按钮,将会发布一个重复的问题。如何避免这个问题? 我正在使用PHP。当用户点击浏览器的“刷新”按钮时如何避免重复?
这是POST
请求后通常的做法,重定向到同一页面以避免此问题。
比方说,你是在/ask_question.php
你开<form>
标签可能是这样的:
<form action="/ask_question.php" method="post">
现在,在/ask_question.php
做这样的事情:
if(isset($_POST['new-question'])){
// Do your processing here
// On success:
header('Location: /ask_question.php');
exit(); // End the request
}
更新仅在重定向后重要已经处理了有效的$_POST
请求。我测试了名为new-question
表单域,但你应该使用有存在的任何形式的字段名称为$_POST
成功
这种处理他们发布的数据,然后成功,重定向回同一页。现在唯一的区别是,当他们点击刷新时,不会发布任何信息。
注意只要确保在header
调用之前没有任何东西echo
'被删除。
打我吧。 =) – 2009-12-26 07:50:23
@Alix哈哈。但是,我太冗长了。你的答案要短得多,并且可能更好地传达答案:) – 2009-12-26 07:52:31
@Doug:详细程度很好。 =) – 2009-12-26 07:58:06
首先,为您的表单使用POST。几乎每个浏览器都会要求用户在刷新POST表单结果时进行确认,因为它必须重新提交。
其次,在您的表单处理脚本中,检查问题是否已经存在 - 或为用户设置会话并跟踪他们是否最近提交了一些内容。
但我的浏览器(Firefox)不会要求我确认。 – Steven 2009-12-26 08:03:25
然后你的浏览器有一个错误。这个对我有用。 – 2009-12-26 08:06:53
提交使用POST形式,在提交验证,如果一切都很好用户重定向到成功页面,这样,如果用户刷新页面所有他要做的就是再次看到“谢谢”页面。
如何确定数据是否已提交? – Steven 2009-12-26 07:46:47
*.com如何避免/解决此问题? – Steven 2009-12-26 08:04:46