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

标签 php header forms

我正在寻找解决方案,以解决应用程序中基于表单的搜索结果反复出现的问题。

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

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

"To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier."

举个例子,一个搜索 DVD 收藏的表单,用户按年份搜索,单击单个电影。当用户单击返回搜索结果页面时,我不希望用户必须重新提交/重新发送该表单数据。

那么有人知道如何解决这个问题吗?

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

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

由于大多数网站都受密码保护,因此我不希望缓存受密码保护的部分并能够在登录后恢复。

本质上,避免此类浏览器行为的最佳方法是什么?原因是什么?无缓存是罪魁祸首吗?我是否应该在搜索结果页面上指定页面加载后几分钟的过期时间?

解决这个问题的最佳方法是什么,因为我在其他网站上没有看到这个问题。我对无缓存部分的理解是错误的吗?

最佳答案

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

附带说明 - 无论使用 GET 还是 POST,您都应该考虑是否需要使用 session 来缓存结果,从而防止不必要的数据库调用。

附注使用 GET 请求有一个很大的优点,即您的搜索结果页面可以添加书签。

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

关于php - 搜索结果和后退按钮/HTML 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903227/

相关文章:

c++ - 循环依赖c++

html - 页眉和页脚冲突

php - 一个提交按钮需要一种形式的输入字段,但其他按钮不需要?

javascript - 如何在提交后重置表单

php - 在什么情况下需要关闭 HTTP 连接?

php - 创建唯一的账单标识符

c - 头文件的多重包含错误 - C

c++ - 防止 Content-Disposition 中的绝对文件路径 "filename"

php 将秒转换为时间戳

php - 使用正则表达式分组将搜索字符串转换为(我的)SQL where 子句