我正在做一些PHP编码,如果在浏览器上按下“后退”按钮,我会收到以下错误:
Document Expired
This document is no longer available.
我可以实施哪些代码来迎合这种情况
答案 0 :(得分:21)
在PHP代码的开头添加:
ini_set('session.cache_limiter','public');
session_cache_limiter(false);
答案 1 :(得分:16)
在主页面中设置Cache-Control标题。
<?php
header('Cache-Control: max-age=900');
?>
答案 2 :(得分:15)
使用发布/重定向/获取规则可以避免这种情况。
以下问题会出现此问题:
example1.php
,example2.php
和example3.php
example1.php
到example2.php
的一些值,然后根据我的需要完成了所有数据库内容并呈现了页面(未重定向 - 刚发布并且页面已呈现)。example2.php
重定向到example3.php
。
现在,如果您单击浏览器文档将过期。 要避免这种情况,我们可以将值从example1.php
发布到example2.php
,并立即将用户重定向到其他页面。
这是Post/Redirect/Get模式,可以遵循以避免文档过期。它还有助于避免DB中的冗余条目。
答案 3 :(得分:2)
去你的服务器的php.ini和 改变这个
session.cache_limiter = nocache
作为
session.cache_limiter = public
问题将得到解决。我解决了这个问题。
答案 4 :(得分:1)
检查标头上是否禁用了缓存,如
<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
答案 5 :(得分:1)
我遇到了同样的问题。我想要回来的页面已经发布了表单的值,所以当我点击Back链接时,它显示了Document Expired错误。见例子 -
有三个页面,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中,因此页面将按预期加载。
答案 6 :(得分:1)
将此行放在您的页面中。
<?php
header("Cache-Control: max-age=300, must-revalidate");
?>
答案 7 :(得分:0)
以下两种情况会出现此问题:
Post
有两种方法可以轻松克服这个问题而无需任何黑客攻击。
对于search form
,请不要使用post
方法,而是使用get方法,一切正常。
如果您确实需要隐藏表单输入,无论出于何种原因并希望使用post方法,那么导致重定向到其他页面的链接/操作会使其重定向到JavaScript。
location.replace('http://example.com/page2');
这将删除引荐URL并强制新的http请求。 现在按下浏览器上的后退按钮不会导致文档过期。