我有php生成的页面,每隔几分钟就会根据底层数据进行更改。一切都很好,直到用户关注链接。当用户单击其浏览器上的后退按钮以返回时,将显示先前加载的页面版本。浏览器没有从服务器重新加载页面。
要从服务器获取新内容,用户必须单击“重新加载”。
我尝试了普通的meta标签,并从php输出header()。
IE,FF和Chrome中的行为相同。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
答案 0 :(得分:2)
尝试设置这些标题
header("Cache-control: no-store, no-cache, must-revalidate");
header("Expires: Mon, 26 Jun 1997 05:00:00 GMT");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
这告诉浏览器不要缓存页面,所以它应该在它们回击时重新加载。
答案 1 :(得分:0)
没有一种适用于所有浏览器的解决方案。
无论您使用某些浏览器的标头,似乎总是可以缓存!
我只是想出了我自己想要的解决方案。一直在盯着我。
这不会阻止浏览器缓存数据,只会阻止在重新加载页面后从缓存中重新读取过时的数据。如果数据是敏感数据并且从不希望将其写入高速缓存,则仍然可以使用这些标头,但是在所有情况下都无法使用。在不必要的应用程序中,我只想避免从浏览器缓存中加载过时的数据。
该解决方案非常简单,几乎不需要什么专业知识即可实施。
我使用php,但我相信URL变量可以与asp,javascript和更多内容一起使用
您的浏览器将http://example.com/index.php,http://example.com/index.php?x=32和http://example.com/index.php?x=3199视为不同的URL,因此它将不会使用上述任何URL作为另一个URL的缓存。
我在PHP中生成一个随机数,您可能可以在ASP中完成
在php中,我使用:
$rand=(rand(1, 99999));
现在我的PHP链接(即使使用有限的PHP也应该很容易理解)
'<a href="http://example.com/index.php?rand='.$rand.'>"
如果页面已经具有URL变量,那么我们会将其添加到任何GET表单或串联的链接中。
如果表单是邮政表单,我们会通过“操作” URL对其进行标记,所以
http://example.com/index.php
成为
http://example.com/index.php?rand=<?php echo $rand;?>
然后,我不想缓存的任何页面我都只是将这个随机数添加为URL变量。服务器完全不处理该URL变量,我从不获取该编号,也不需要这样做。
http://example.com/index.php?rand=4398 下次我们加载同一页面时,由于rand = URL变量不同,浏览器认为它是不同的页面。
不用担心,我们永远不必阅读它,仅是“愚弄”浏览器。下一个Timne,我们将在同一页面上看到一个非常不同的数字
http://example.com/index.php?rand=55468
或者就您的浏览器而言,即使在我们完全将变量丢弃回服务器的情况下,也不是在同一页面上,这意味着它在您的ASP或PHP中没有任何价值,并且从未用作变量。
答案非常简单,我感到惊讶,我花了数周的时间对此进行了尝试,但始终无法正常工作。这样!