2010-01-27 42 views
18

我的问题是后退按钮使浏览器说类似“网页过期”的时候,前面的页面是由形式创建的。

例子:

  • 第1页:与联系接收用户$ _ POST请求,并 显示结果(表:表格搜索 规定 - ($ _ POST请求的形式 点到第2页)
  • 第2页提交, 分3页)
  • 第3页:显示用户配置文件

现在,当v isitor点击浏览器中的后退按钮,它会显示“Page expired”之类的内容。

而不是以前的页面应该没有警告(第2页,与用户列表)

如何是你的策略来解决这个问题显示?

+2

哇!我只是学习一些新的东西:'not'标签操作符。 xD – 2010-01-27 11:31:57

回答

23

如果您要提交与搜索参数,你想得到一些数据,而不是修改一些。

所以,你应该使用HTTP GET方法,而不是POST:POST应该当你打算创建/修改数据,和GET时,应使用你打算获取一些数据使用。


或者,如果你有一些创建/修改必须完成操作:

  • 形式的第一POST到第一页
    • 该网页确实有些操作(喜欢写作事到数据库)
    • ,然后重定向到另一个页面,使用Location HTTP标头。
  • 这就是最后一页,即浏览器使用GET请求进行的查询,它显示从URL中收到的参数中获取的数据。

查看wikipedia上关于此页面的Post/Redirect/Get页面。

+0

另外,如果您使用GET,结果页面可加书签 – 2010-01-27 11:36:27

+1

优秀的答案。不可能更清楚并且重要。同时给予更多的要求;备选方案和更多见解。谢谢。 – Cudos 2010-01-27 11:46:52

+0

@Cudos:​​不客气:-)玩得开心! – 2010-01-27 12:11:24

1

送在你发布到脚本Location头,指着随附后的页面。

+0

对此使用HTTP状态码303。根据当前文档,如果未明确指定,则PHP默认为302。 – MattBianco 2014-06-05 13:49:59

1

请勿使用POST进行搜索。搜索可以安全地使用GET完成,因为它不会改变任何内容。

1

这适用于PHP和IE8。

不仅必须设置cacheing私人,但你必须删除4 cacheing头,这只能与PHP 5.3来完成。在PHP 5中。2如果使用Zend Framework的setHeader()方法,只能将4个标头设置为空值。出于某种原因,在IE8上将4个标头值设置为空值是不够的。这里是PHP 5.3的代码:

header_remove("Expires"); 
    header_remove("Cache-Control"); 
    header_remove("Pragma"); 
    header_remove("Last-Modified"); 
0

你可以使用session来做到这一点。

例如。

$ _SESSION ['name'] = $ _POST ['name'];

记住在过程完成后取消设置变量以优化内存使用情况。

相关问题