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