我的问题是,当前一页由表单创建时,后退按钮会导致浏览器说“页面已过期”。
例子:
- page1:使用搜索条件提交的表单($_POST 请求,表单指向 page2)
- page2:接收 $_POST 请求并显示结果(带有链接的用户列表,指向 page3)
- page3:显示用户资料
现在,当访问者单击浏览器中的后退按钮时,它会显示类似“页面已过期”的内容。
相反,上一页应该显示没有警告(page2,带有用户列表)
您如何解决这种行为?
如果您正在提交带有搜索参数的表单,那么您正在尝试获取一些数据,而不是修改一些数据。
因此,您应该使用 HTTP GET 方法,而不是 POST:当您打算创建/修改数据时应该使用 POST,而当您打算获取一些数据时应该使用 GET。
或者,如果您有一些必须完成的创建/修改操作:
Location
HTTP 标头重定向到另一个页面。请参阅 wikipedia 上的Post/Redirect/Get页面,了解这一点。
在您发布到的脚本中发送一个Location
标题,指向后面的页面。
不要使用 POST 进行搜索。可以使用 GET 安全地完成搜索,因为它不会改变任何内容。
这适用于 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");
您可以使用会话来执行此操作。
例如。
$_SESSION['name'] = $_POST['name'];
请记住在该过程完成后取消设置变量以优化内存使用。