后退按钮重新提交表单数据($ _POST)

时间:2010-01-27 11:29:39

标签: php forms post button back

我的问题是,当窗体创建上一页时,后退按钮会导致浏览器说“页面已过期”。

示例:

  • 第1页:使用搜索提交的表单 标准($ _POST请求,表格 指向第2页)
  • 第2页:接收$ _POST请求和 显示结果(带链接的用户列表, 指向第3页)
  • 第3页:显示用户个人资料

现在,当访问者点击浏览器中的后退按钮时,它将显示“页面已过期”等内容。

相反,应显示上一页没有警告(第2页,使用用户列表)

你的策略如何解决这种行为?

6 个答案:

答案 0 :(得分:23)

如果您使用搜索参数提交for,则尝试获取某些数据,而不是修改某些数据。

因此,您应该使用HTTP GET方法,而不是POST:当您打算创建/修改数据时应该使用POST,并且当您打算获取某些数据时应该使用GET。


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

  • 表单首先POST到第一页
    • 该页面执行一些操作(比如写一些东西到数据库)
    • 然后使用Location HTTP标头重定向到另一个页面。
  • 这是最后一页,即浏览器使用GET请求进行的查询,显示从URL中收到的参数中提取的数据。

请参阅维基百科上的Post/Redirect/Get页面,了解相关信息。

答案 1 :(得分:14)

答案 2 :(得分:1)

在您发布的脚本中发送Location标题,指向后面的页面。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

这适用于PHP和IE8。

您不仅必须将缓存设置为私有,而且必须删除4个缓存标头,这只能通过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");

答案 5 :(得分:0)

您可以使用会话来执行此操作。

例如

$ _ SESSION [' name'] = $ _POST [' name'];

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