2011-01-07 85 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瀏覽器
  • 歌劇
相關問題