我正在使用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");
我做错了什么?请帮忙。
由于
答案 0 :(得分:1)
使用所提供的信息量给出一个完美的答案会非常困难,但我可以告诉您,在页面提交到另一个页面后需要重定向用户,这样刷新后页面就不会重新提交。
答案 1 :(得分:1)
您没有做任何事情"错误",但就浏览器而言,如果您发布请求然后刷新它(POST或GET请求),它将重新发送请求。
为了避免这种行为(在任何框架或应用程序中),我建议每个人提交"提交"实际上是2个请求的一部分,一个提交信息,一个重定向到结果的表示。
例如,假设您有一个帖子消息处理程序(控制器方法)和一个评论处理程序视图(控制器方法)。
然后用户进入视图评论页面,它填写新评论并发布到同一页面,但不是发布到创建方法页面/控制器/方法,而是显示任何实际重定向到原始页面的结果被人看见。
所以,像这样:
/comments
收到GET请求并显示评论列表/comments
页面内有一个表单可以输入新评论,此表单的操作会对/comment/add
/comment/add
收到POST请求,会创建新评论,然后重定向回/comments
,它不显示任何HTML,只是重定向我希望有所帮助。