23

我做了一些 PHP 编码,如果在浏览器上按下“返回”按钮,我会收到以下错误:

Document Expired
This document is no longer available.

我可以实现什么代码来适应这种情况

4

8 回答 8

25

在 PHP 代码的开头添加

ini_set('session.cache_limiter','public');
session_cache_limiter(false);
于 2014-12-08T01:18:51.210 回答
18

在主页中设置 Cache-Control 标头。

<?php
header('Cache-Control: max-age=900');
?>
于 2012-10-06T04:25:21.523 回答
16

使用 Post/Redirect/Get 规则可以避免这种情况。

此问题将由以下情况出现:

  • 假设我有example1.phpexample2.php并且example3.php
  • 从那时起,我发布了一些值example1.phpexample2.php然后我根据需要完成了所有数据库内容并渲染了页面(未重定向 - 刚刚发布并且页面被渲染)。
  • 之后,我将页面从 重定向example2.phpexample3.php。现在,如果您单击浏览器返回Document 将过期

为了避免这种情况,我们可以将值发布example1.phpexample2.php并立即将用户重定向到其他页面。

这是可以遵循的Post/Redirect/Get模式以避免文档过期。它还有助于避免数据库中的冗余条目。

于 2012-11-26T06:38:03.047 回答
4

只需将此行放在您的页面中。

<?php 
header("Cache-Control: max-age=300, must-revalidate"); 
?>
于 2017-12-01T10:49:17.620 回答
2

去你的服务器的 php.ini 并改变它

session.cache_limiter = nocache

作为

 session.cache_limiter = public

问题就解决了。我用这个解决了我的问题。

于 2015-09-16T05:26:28.483 回答
1

我遇到了同样的问题。我想返回的页面发布了表单值,因此当我点击返回链接时,它显示文档过期错误。见例子——

共有三个页面,page1.php、page2.php 和 page3.php。现在我正在使用 POST 方法从 page1.php 向 page2.php 提交一些表单。从 page2.php 我点击了 page3.php 的一些链接。

现在我想从 page3.php 回到 page2.php。但是 page2.php 使用 POST 方法发布了表单值,当我从 page3.php 进入 page2.php 时,浏览器显示错误“Docuemnt Expired”。

所以我使用GET方法不是POST。因此,当返回 page2.php 时,将不会有表单的 POST 值,并且页面将正确加载。此外,由于 URL 中存在表单值,因此页面将按预期加载。

于 2014-07-03T13:38:41.127 回答
1

检查是否在标头上禁用了缓存,例如

<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

于 2012-05-29T08:34:12.073 回答
0

这个问题会在以下两种情况下出现:

  • 实现搜索Post
  • 重定向回之前发布的页面。

有两种方法可以轻松克服这个问题,而无需任何黑客攻击。

对于search form不使用post方法,而是使用 get 方法,一切正常。

如果您出于某种原因确实需要隐藏表单输入并想使用 post 方法,那么导致重定向到其他页面的链接/操作,使其通过 JavaScript 重定向。

location.replace('http://example.com/page2');

这将删除推荐 URL 并强制执行新的 http 请求。现在按浏览器上的后退按钮不会导致文档过期。

于 2017-02-04T10:51:45.480 回答