【问题标题】:Back button re-submit form data ($_POST)后退按钮重新提交表单数据 ($_POST)
【发布时间】:2011-01-09 22:13:26
【问题描述】:

我的问题是,当前一页由表单创建时,后退按钮会导致浏览器显示“页面已过期”之类的信息。

例子:

  • page1:通过搜索提交的表单 条件($_POST 请求,表单 指向第 2 页)
  • page2:接收 $_POST 请求并 显示结果(带有链接的用户列表, 指向页面3)
  • page3:显示用户资料

现在,当访问者点击浏览器中的后退按钮时,它会显示类似“页面已过期”的信息。

应该显示上一页而不显示任何警告(第 2 页,带有用户列表)

您有哪些策略来规避这种行为?

【问题讨论】:

  • 哇!我刚刚学到了一些新东西:not 标签运算符。 xD

标签: php forms post button back


【解决方案1】:

在您发布到的脚本中发送一个Location 标头,指向后面的页面。

【讨论】:

  • 为此使用 HTTP 状态码 303。如果没有根据当前文档明确指定,PHP 默认为 302。
【解决方案2】:

【讨论】:

    【解决方案3】:

    如果您提交带有搜索参数的表单,您是在尝试获取一些数据,而不是修改一些数据。

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

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

    • 表单首先发布到第一页
      • 该页面执行一些操作(例如向数据库写入内容)
      • 然后使用Location HTTP 标头重定向到另一个页面。
    • 最后一页,即浏览器使用 GET 请求进行的查询,显示从 URL 中接收的参数获取的数据。

    请参阅维基百科上的 Post/Redirect/Get 页面,了解此内容。

    【讨论】:

    • 优秀的答案。再清楚不过了。也给予超过要求;替代方案和更多洞察力。谢谢。
    • 但是当我发送 GET 请求 URL 时用户不友好,并且包含所有搜索数据。我该如何解决这个问题?
    • 另外一个问题,如果您不介意的话。我使用 POST 方法,因为我的页面必须使用一些 UTF-8 字符进行搜索(在我的例子中,'韩语')。它无法使用 GET 提供正确的搜索文本。但是,由于我使用了 POST 方法,所以 Bowser 后退按钮不起作用。在这种情况下我能做什么?谢谢:D b
    • 在为 seo 制作干净的 url 时获取变量会出现问题。如果某些变量留空...
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这适用于 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");
      

      【讨论】:

        【解决方案6】:

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

        例如。

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

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

        【讨论】:

          猜你喜欢
          • 2012-07-07
          • 2015-12-30
          • 1970-01-01
          • 2014-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-29
          相关资源
          最近更新 更多