清除浏览器缓存以防止表单重新提交

时间:2015-09-16 14:52:17

标签: php mysql codeigniter

我正在使用CodeIgniter(此新功能)在论坛页面上工作,但是一旦用户提交评论并刷新页面,则在单​​击“继续”到“确认表单重新提交”提示时重新提交评论。

我在控制器的方法中添加了以下内容,但浏览器缓存中的帖子数据未被清除。

$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("HTTP/1.1 200 OK");
$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Pragma: no-cache");

我做错了什么?请帮忙。

由于

2 个答案:

答案 0 :(得分:1)

使用所提供的信息量给出一个完美的答案会非常困难,但我可以告诉您,在页面提交到另一个页面后需要重定向用户,这样刷新后页面就不会重新提交。

  

请参阅Post/Redirect/Get

答案 1 :(得分:1)

您没有做任何事情"错误",但就浏览器而言,如果您发布请求然后刷新它(POST或GET请求),它将重新发送请求。

为了避免这种行为(在任何框架或应用程序中),我建议每个人提交"提交"实际上是2个请求的一部分,一个提交信息,一个重定向到结果的表示。

例如,假设您有一个帖子消息处理程序(控制器方法)和一个评论处理程序视图(控制器方法)。
然后用户进入视图评论页面,它填写新评论并发布到同一页面,但不是发布到创建方法页面/控制器/方法,而是显示任何实际重定向到原始页面的结果被人看见。

所以,像这样:

  • /comments收到GET请求并显示评论列表
  • /comments页面内有一个表单可以输入新评论,此表单的操作会对/comment/add
  • 进行发布操作
  • /comment/add收到POST请求,会创建新评论,然后重定向回/comments,它不显示任何HTML,只是重定向

我希望有所帮助。