2011-01-07 84 views
9

我已经尝试了所有应该停止缓存页面的元标记的组合和排列组合,但Firefox仍然缓存页面! 我只需要在用户按下后退按钮时重新加载URL。在IE8中正常工作。当按下返回按钮时,如何使Firefox重新加载页面?

我已经尝试了所有的这些...

<meta http-equiv="Cache-Control" content="no-store" /> 
<meta http-equiv="Pragma" content="no-cache"/> 
<meta http-equiv="Expires" content="-1"/> 
<meta http-equiv="Expires" content="Sat, 1 Jan 2000 00:00:00 GMT" /> 

...我也曾尝试以下JavaScript ...

<input type="hidden" id="refreshed" value="no"/> 
<script type="text/javascript"> 

    onload=function(){ 
     var e=document.getElementById("refreshed"); 
     if(e.value=="no"){ 
      e.value="yes"; 
     } 

     else{ 
      e.value="no"; 
      location.reload(); 
     } 

    } 

</script> 

...都无济于事。我在这里错过了什么?如果有问题,使用PHP生成页面。

更新1:

我都想尽建议,到目前为止,但我仍然不能得到这个工作。当我使用Chris的PHP代码我用它像这样...

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> 
<!--the rest of my page--> 

..和你可以看到它在我的网页的最顶端,在DOCTYPE头之前。

我也尝试过session_start(),但即使在阅读手册后,我不确定我是否正确使用它。我正在把它放在我的页面顶部。

我接受任何建议,使这项工作没有打破其他页面功能。我知道我看到了每次重新加载后退按钮的页面,它们是如何做的?!

已解决!

原来我有多个问题对我不利,但通过尽职调查,我能够消除这些问题并获得胜利。

克里斯更新了他的代码后...

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
echo time(); 
?><a href="http://google.com">aaaaaaaaaaaaa</a> 

我发现,当我用它正是他如何与别的有它自己的代码确实工作,但是当我把它放到我的网页它没有工作。我的所有页面都是.php.html,都连接到DWT(动态Web模板),所以我用Chris的代码一次更新所有这些页面。我没有意识到,DWT在DOCTYPE标题后面开始,因此代码从未插入到我的页面中。我无法找到使DWT包含DOCTYPE标题的方法,所以我进入了我的所有页面,并手动将代码手动插入DOCTYPE标题的上方。

接下来,我发现,即使我的服务器设置为解析.htm.html.php.html页面被在那里我插入克里斯的代码说着什么的“不能修改标题效果非常生成错误,头部有已经发送“。我并不在乎我的分机是什么,所以我只是将所有的.html分机改为.php分机。

最后一个小问题是,即使页面现在没有被缓存(就像我想要的那样),当用户使用后退按钮时,Firefox将用户放在上一页的最后位置(即,如果用户在他们导航到页面b时,在页面底部a,然后用户使用页面b上的后退按钮,他们将返回页面a的底部,而不是页面a的顶部)。削减我原来的JavaScript固定这...

<script type="text/javascript"> 

     onload=function(){ 
      document.getElementById('content').scrollTop=0; 
     } 

    </script> 

即使这似乎非常涉及这样一个简单的问题,我很高兴它是固定的。感谢大家的帮助(特别是Chris)。

+0

难道不应该读? – Adam 2011-01-07 21:33:39

+0

@Adam我不这么认为,但我试过两种方法来确保......没有运气。 – ubiquibacon 2011-01-07 21:54:39

回答

9

这对我的作品

使新的PHP文件。我可以使用页面上的前进和后退按钮和数字始终更新

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
echo time(); 
?><a href="http://google.com">aaaaaaaaaaaaa</a> 
+0

@chris我厌倦了这种变化(建议在这里:http://stackoverflow.com/questions/3645609/reload-the-page-on-hitting-back-button)...你有点不同,所以我会试试吧。 – ubiquibacon 2011-01-07 21:45:16

+0

@chris是否有可能我把这个放在了错误的地方?我已经在``标签中试过,'`标签后面,'标签之前,以及页面的最顶部,'DOC TYPE'之前,它们都没有工作。 – ubiquibacon 2011-01-07 22:06:34

+0

你需要把它放在一切之前,包括任何空格(空格,换行符等)@typo。 – Hello71 2011-01-07 22:09:43

0

查看实时HTTP标头,当您按下后退按钮时,您会看到没有请求。这是有目的完成的,所以你不会放弃你可能输入的形式。

编辑

一些岗位上的专家交流说,这工作,但它从2006年开始

<META HTTP-EQUIV="Expires" CONTENT="0"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store"> 

然后一个JavaScript刷新

+0

我知道我在按下后退按钮并重新加载页面的网站上使用了Firefox。我需要这个工作来帮助我的应用程序为用户提供白痴证明,所以我不想要求他们安装插件。 – ubiquibacon 2011-01-07 21:40:08

0
<meta http-equiv="Cache-Control" content="no-cache" /> 

我认为正确的值是“no-cache”的

0
session_cache_limiter('nocache'); 

这应该自动生成所有的必需的标题。请注意,某些浏览器(如Opera)在使用后退按钮时仍会忽略这些浏览器。

编辑要生成他们一些其他的方式

相关的标题是如下,万一:

Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
0

为什么? 我的意思是,你为什么要这样做? 当我按下后退按钮时,我需要浏览器提供的标准功能 - 返回上一页。我不想要一个惊喜。

如果要停止POST的意外重新提交,可以通过使用重定向结束POST处理并使用GET显示所需的回复来轻松完成。稍后返回到此页面,将重新显示重定向的GET(或从缓存中重新加载,必须具有相同的结果)。这是用户期望的并且是无害的。

这还有一个额外的好处,即如果在更新数据库时保存失败,显示屏将显示数据库中的内容,而不是变量中剩下的内容。

0

您发布的评论:

这是因为一旦形式已经 提交,如果用户按下 后退按钮,信息他们是 观赏将是不准确的。

如果你想防止这种做法你做错了! :)

你需要做的是当表单被提交时的重定向。

<?php 
    // code that handles the form submit 
    header("Location: http://www.example.com/form-success.html"); // needs the absolute url (You can use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() for this) 
    exit; // prevents further execution of the php code when while doing to redirect 
?> 
3

您可以在您的PHP页面中添加以下PHP代码。

CodeIgniter Framework version: 
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); 
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false); 
$this->output->set_header('Pragma: no-cache'); 

PHP版本:

header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0',false); 
header('Pragma: no-cache'); 

,你也可能会添加下面的Java脚本代码在登录/母版页在<head>节:

<script language="javascript" type="text/javascript"> 
    window.history.forward(); 
</script> 

兼容性在

    验证
  • Internet Explorer
  • 谷歌浏览器
  • Mozilla Firefox浏览器
  • 歌剧
相关问题