停止页面在刷新时重新发送表单

时间:2011-12-29 21:23:09

标签: php html

我想知道在刷新时是否有办法阻止页面重新发送html表单。

8 个答案:

答案 0 :(得分:6)

您可以将Location标头发送到正在处理表单输入的脚本中的其他网址。这个新的URL将可用于浏览器,而无需发送表单数据。

答案 1 :(得分:5)

使用发布/重定向/获取:http://en.wikipedia.org/wiki/Post/Redirect/Get

PHP中的

处理代码中的表单,然后输出任何放置此header('Location: http://www.example.com/foo.php');的任何内容(显然替换了url)并在另一页上显示。如果您需要将任何内容传递给该页面,请使用查询字符串$_GET[]

答案 2 :(得分:4)

主要是不可能阻止您无法控制的客户端(浏览器)做某事。然而,有可能 - 在您的情况下非常容易 - 强化您的应用程序:

  • 当您显示表单时,创建一个随机令牌,将其存储在会话中并将其作为隐藏字段添加到表单中
  • 当您收到填写的表格时,请检查会话中的令牌,如果不匹配则忽略该数据,如果匹配清除会话中的令牌并处理数据

任何标题或其他技巧可能会或可能不适用于浏览器和人们刷新没有MALICE,但他们肯定无法帮助攻击者。

答案 3 :(得分:1)

我不相信有一个很好的方法可以做到这一点。我们过去完成此任务的方式是在帖子之间设置last_modified日期和最短时间。如果你还没等一个小时说,这个帖子就会被拒绝。

答案 4 :(得分:1)

我知道的唯一技巧是让表单提交返回一个页面,其中包含您通过javascript(元刷新,无论如何)点击的链接,以便您进入第三页。

当您点击F5时最终刷新的内容是链接页面而不是表单提交页面。

答案 5 :(得分:1)

在我寻求解决这个问题的过程中,我采取了一些不同的方法。在自行开发的MVC环境中,我将页面重定向了两次。在确保将数据提交到数据库之后,我将其重定向到

header("Location: http:// .... /redirect/blogcomment

这将调用我的“重定向”类和“blogcomment”方法。在这里,它将再次被重定向到“referer”。

 public function blogcomment() {
    $ref = $_SERVER['HTTP_REFERER'];
    $page = "Location: " . $ref . "#commentform";
    header($page);

}

这会清除POST数组,并在表单字段前面添加一个锚标记,然后我跳回到该位置。当然,我也可以自定义自定义重定向。到目前为止,它就像一个魅力。

答案 6 :(得分:-1)

双重加载......即将页面重定向回自身是不好的做法。尝试调试一个执行此操作的应用程序,这使得实现这一点变得更加尴尬。对于上帝之爱的人来说,如果你必须先提交一个表单,先将它发送到一个单独的脚本,然后再返回如果要删除再次发送表单的刷新,则更容易调试!

答案 7 :(得分:-1)

尝试做:

  unset( $_POST );

作为最后一个命令。