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

mmu*_*iff 2 php forms header

我正在寻找解决我的应用程序中基于表单的搜索结果的重复问题的解决方案.

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

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

"要显示此页面,Firefox必须发送重复之前执行的任何操作(例如搜索或订单确认)的信息."

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

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

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

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

由于大多数站点都受密码保护,我不希望密码保护端缓存,并且能够在登录后重新启动.

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

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

Ric*_*d H 5

您的浏览器正在执行此操作,因为当用户单击"返回"时,浏览器需要再次发布数据才能重新加载页面.解决此问题的一种方法是使用GET请求而不是POST.在GET请求中,表单数据包含在实际URL中/编码.

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

PS使用GET请求的优势在于您的搜索结果页面可以添加书签.

编辑:有一个关于形式的一些好的信息,POST/GET请求,它们之间的差异在这里,包括在其上解决这一问题的"重定向后门柱"模式信息.