代码之家  ›  专栏  ›  技术社区  ›  mmundiff

搜索结果和后退按钮/HTML表单

  •  2
  • mmundiff  · 技术社区  · 16 年前

    基本上,当用户使用HTML表单进行搜索时,我会在下一页显示来自数据库的结果,这非常有效。

    但是,当用户单击结果集中的单个记录,然后单击浏览器上的“后退”时,浏览器会询问(Firefox):

    发送将重复任何操作的信息 早些时候。”

    那么,有人知道如何避开这个问题吗?

    为了向您提供更多信息,我使用POST方法提交表单,并使用以下标题阻止浏览器缓存页面。

    Header('Pragma: no-cache');
    Header("Cache-control: private, no-cache, no-store");
    Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");.
    

    什么是解决这个问题的最好方法,因为我在其他网站上没有看到这个问题。我是不是把没有缓存的部分搞错了?

    4 回复  |  直到 16 年前
        1
  •  5
  •   Richard H    16 年前

    您的浏览器之所以这样做,是因为当用户单击“上一步”时,浏览器需要再次发布数据以重新加载页面。解决这个问题的一种方法是使用GET请求而不是POST。在GET请求中,表单数据包含/编码在实际URL中。

    作为旁注,无论是使用GET还是POST,您都应该考虑是否需要使用会话来缓存结果,以防止不必要的数据库调用。

    编辑:关于表单、POST/GET请求以及它们之间的差异,有一些很好的信息 here ,包括有关解决此问题的“发布后重定向”模式的信息。

        2
  •  0
  •   Brad    16 年前

        3
  •  0
  •   Jeremy DeGroot    16 年前

    有两种方法可以防止这种行为。

    1. 从POST更改窗体的方法 得到。这将对查询进行编码 在URL中,删除此后退按钮 行为。FWIW,这就是谷歌所做的 为他们的搜索做准备。
    2. 或Memcache),并将它们重定向到 另一个将访问 302 Redirect 标题。
        4
  •  0
  •   streetparade    16 年前

    这与PHP无关。

    将要求再次执行该职位。

    GET不会发生这种情况的原因是GET信息是 在URL中。

    推荐文章