2011-05-12 175 views
2

我正在開發一個動態Web應用程序(在IIS7上運行),它在所有主流瀏覽器(除IE9以外)都能正常工作。看來,這緩存幾乎一切,這導致了相當多的問題,如IE9緩存動態頁面

  • 經常變化的內容保持不變
  • 用戶訪問授權的內容,然後登出,然後試圖回到安全內容並從緩存中獲取!

我試圖禁用緩存,

<meta http-equiv="Expires" CONTENT="0"> 
<meta http-equiv="Cache-Control" CONTENT="no-cache"> 
<meta http-equiv="Pragma" CONTENT="no-cache"> 

但至今沒有運氣...

回答

1

你是否大量使用AJAX?確保每個AJAX請求都是唯一的,否則IE9將提供緩存版本的請求響應。

例如,如果您的AJAX請求URL通常是這樣的: http://www.mysite.com/ajax.php?species=dog&name=fido

相反,一個獨特的價值添加到每個請求,所以IE不只是使用緩存的響應。使用Javascript最簡單的方法是每次提出請求時都會增加的變量:

var request_id = 0; 

var request_url = "http://www.mysite.com/ajax.php?species=dog&name=fido&request_id="+request_id; 
request_id++; 
+1

如果這是問題,並且他們使用jQuery for AJAX,這是一個很好的全局解決方案:http://www.peteonsoftware.com/index.php/2010/08/20/the-importance- of-jquery-ajaxsetup-cache/ – 2011-05-12 12:56:40

+0

如果你使用jquery,那麼這很有用,但不是每個人都這樣做(我知道我不知道)。 – 2011-05-12 12:58:01

+0

這是有幫助的:http://stackoverflow.com/questions/367786/prevent-caching-of-ajax-call – BeaverProj 2011-07-06 22:24:09

3

我剛剛在MVC開發中遇到過這個問題。

我想禁用所有AJAX請求緩存服務器端。

爲此,我註冊了以下全局過濾器。

public class AjaxCacheControlAttribute: ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
      filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); 
      filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      filterContext.HttpContext.Response.Cache.SetNoStore(); 
     } 
    } 
}