当用户点击浏览器的“刷新”按钮时如何避免重复?

当用户点击浏览器的“刷新”按钮时如何避免重复?

问题描述:

例如,我问这个问题,然后单击“发布您的问题”并保留在当前页面中。现在我可以点击浏览器的“刷新”按钮来查看新的答案。但我发现在我的网站上,如果我点击“刷新”按钮,将会发布一个重复的问题。如何避免这个问题? 我正在使用PHP。当用户点击浏览器的“刷新”按钮时如何避免重复?

+0

如何确定数据是否已提交? – Steven 2009-12-26 07:46:47

+0

*.com如何避免/解决此问题? – Steven 2009-12-26 08:04:46

这是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'被删除。

+0

打我吧。 =) – 2009-12-26 07:50:23

+0

@Alix哈哈。但是,我太冗长了。你的答案要短得多,并且可能更好地传达答案:) – 2009-12-26 07:52:31

+0

@Doug:详细程度很好。 =) – 2009-12-26 07:58:06

首先,为您的表单使用POST。几乎每个浏览器都会要求用户在刷新POST表单结果时进行确认,因为它必须重新提交。

其次,在您的表单处理脚本中,检查问题是否已经存在 - 或为用户设置会话并跟踪他们是否最近提交了一些内容。

+0

但我的浏览器(Firefox)不会要求我确认。 – Steven 2009-12-26 08:03:25

+0

然后你的浏览器有一个错误。这个对我有用。 – 2009-12-26 08:06:53

提交使用POST形式,在提交验证,如果一切都很好用户重定向到成功页面,这样,如果用户刷新页面所有他要做的就是再次看到“谢谢”页面。