2012-01-09 110 views
3

在我的asp.net表單應用程序中。我試圖阻止某些頁面的緩存。 這樣做我已經使用Response.AppendHeader 設置了一系列緩存控制標題,例如,設置ASP.NET緩存控制標頭

 
protected override void OnLoad(Eventargs e) 
{ 
... 
Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control","no-cache"); 
.... 
base.OnLoad(e); 
} 

麻煩的是,當我查看我的網站,並期待在Firefox的控制檯Net標籤查看請求/響應頭我看到的行爲如下:

  1. POST請求/響應對於觸發重定向(page2.aspx)的page1.aspx 這裏的響應包含正確的標題。

  2. GET請求/響應對page2.aspx 關聯響應具有高速緩存控制報頭只具有值爲「預檢查= 0」

即第二請求似乎允許緩存到發生的頁面.. 注意:page1.aspx和page2.aspx都有我上面描述的OnLoad邏輯。另外,如果我在page2.aspx上採取了一些操作,則POST響應將再次具有正確的標題。

我在這裏錯過了什麼?我的期望是,OnLoad中的邏輯應該意味着我總是在響應中獲得標題,因此「總是」獲取當前版本的頁面?

我看到的是firefox加載它的緩存版本的頁面。

我正在考慮在請求url中創建一個隨機標識符來強制這件事,但這似乎有點沉重。

----- update ----- 看來,這可能與在'OnLoad'中使用緩存代碼有關。 我已經將這些標題添加到頁面的Page_Load(),它工作正常嗎? 任何想法。對於

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

回答

2

試換了Response.AppendHeader("Cache-Control","no-cache");,並確保你沒有一個@ OutputCache directive,並不explicitly preventing cache control。見this MSDN page on SetCacheabilitySetNoStore

+0

請看我上面的附加說明。 – TygerKrash 2012-01-12 18:47:26

+0

@TygerKrash您的標題可能在某些時候被覆蓋? 'base.OnLoad'發生了什麼?你可以逐步完成代碼,並且a)驗證設置緩存控制的代碼是否被命中,以及b)觀察響應對象以查看它正在改變的位置? – 2012-01-12 19:12:56