2012-09-06 22 views
2

我需要一些網頁要在傳統的ASP應用程序緩存,但我試過頭並沒有什麼的每一個可能的組合,似乎工作:如何防止傳統ASP應用程序上的頁面緩存?

Response.Expires   = -1 
Response.ExpiresAbsolute = Now() - 1 
Response.CacheControl = "no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0" 
Response.AddHeader   "Cache-Control", "no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0" ' Same as previous line, I know, just in case. 
Response.AddHeader   "Pragma", "no-cache" 
Response.AddHeader   "Expires", "-1" 

我也試着重新啓動這兩個網站和IIS,無濟於事。當我離開頁面並使用瀏覽器的後退按鈕返回時,它不會重新加載。

缺少什麼我在這裏?

編輯:有更多的谷歌搜索後,我發現和實施this JavaScript solution,這不是防彈的,因爲它的客戶端,我寧願一個服務器端解決方案,但它的工作!

不過,我想聽聽任何服務器端選項。

回答

3

看起來沒錯..嘗試使用這個。

運行這些語句之前發送任何HTML給用戶,這是你的印象下運行瀏覽器的後退按鈕的結果是與HTTP緩存之前的任何Response.Write<%=foo()%>

Respose.Buffer = True 
Response.CacheControl = "no-cache" 
Response.AddHeader "Pragma", "no-cache" 
Response.Expires = -1 
+0

你最後三條線是我開始的,然後沒有結果,我開始添加到代碼,直到它成爲我張貼的6條線。我在頁面上也有'Response.Buffer = True',不,在這6行之前我沒有向瀏覽器發送任何東西。我仍然嘗試你的代碼(再次),但沒有。在這一點上,我幾乎可以肯定,這個問題與代碼沒有任何關係,但是與什麼有關? – Estrada

+0

您是否嘗試過IISRESET並在添加這些行後清除緩存?您可能還想檢查IIS中的設置以緩存您使用的iis版本? – Mortalus

+0

IIS 7.5。我試過IISRESET(我認爲它也清除了緩存?)。沒有。 – Estrada

9

, 不是這樣。

提供後退按鈕由瀏覽器自行決定,從HTTP堆棧的角度來看應用程序。應用程序沒有義務考慮用於呈現窗口內容的任何http請求的緩存要求。的確,許多瀏覽器都能夠顯示通過http以外的其他協議傳送的內容。

考慮使用後退按鈕最常見的情況。用戶從網絡搜索引擎(google,bing,...)獲得一些搜索結果,點擊其中一個結果,很快就會看到內容不是他們想要查找的內容,並單擊後退按鈕。爲了驗證用戶的體驗,大多數瀏覽器在頁面導航發生時都會保留頁面的許多資源(甚至是頁面呈現的窗口)。後退按鈕可以通過重組這些資源來實現,甚至可以簡單地使原始窗口再次可見。

+0

感謝您的解釋,安東尼非常澄清,+1。那麼如何在按下「後退」按鈕後重新加載頁面? – Estrada

+0

好的解釋+1和100K :) – Habib

1

當你按下後退按鈕時,一些瀏覽器總是被緩存。有一種方法可以捕捉資源管理器的事件返回按鈕,儘管可能會有些可怕的事情。您可以通過AJAX加載頁面的數據,並防止通過javascript生成的randon變量進行緩存。 讓我知道,如果你需要一個例子,請...

0

爲了防止經典ASP上的特定頁面緩存。請嘗試以下代碼:

<% Response.CacheControl = "no-cache, no-store, must-revalidate" %> 

在章節中添加上面的代碼。