我想知道在刷新时是否有办法阻止页面重新发送html表单。
答案 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 );
作为最后一个命令。