2010-09-22 104 views
2

我正在寫一個應用程序,並遇到緩存問題,我不能解決。ASP.NET MVC 2緩存問題

我有一個網站的默認主頁控制器,它檢查用戶是否通過身份驗證。 如果不是則顯示LogOn View,否則客戶端被重定向到另一個頁面。

除了LogOn視圖之外,如果瀏覽器支持cookie,還會向用戶發送Check cookie以檢查響應。

當我與憑證發送表單之前刪除cookie,首頁(Post方法)在首頁控制器顯示消息餅乾必須使用一個按鈕來激活它 應登錄框刷新頁面(http://localhost:1234/

此按鈕鏈接到js刷新功能:

var sURL = unescape("/"); 

function refresh() 
{ 
    window.location.href = sURL; 
} 

我已經實現了在基礎控制器上設置的CacheFilter。

public class NoCache : ActionFilterAttribute, IActionFilter 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
     filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); 
     filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     filterContext.HttpContext.Response.Cache.SetNoStore(); 
     base.OnResultExecuting(filterContext); 
    } 

    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     base.OnResultExecuted(filterContext); 
    } 
} 

問題是,如果我立即點擊按鈕刷新LogOn頁面,瀏覽器使用它的緩存讀取它。但是當我在幾秒鐘之後完成時,查詢就會發送到服務器。 這是錯誤的,因爲LogOn頁面還應該再次創建一個Check cookie。

在我看來,緩存策略設置爲1-2秒,並在此之後頁面從服務器重新加載。

有什麼不對?感謝幫助。

+0

您正在測試哪個瀏覽器?或者所有瀏覽器都遇到同樣的問題? – 2010-09-22 07:19:09

+1

它是在Firefox下測試的,IE可能是bahaves山姆的方式..但稍後會檢查它 – XXL 2010-09-22 09:51:05

回答

0

我是否正確地說你在Visual Studio中運行這個測試?

據我所知,您不能在Visual Studio Development Server中啓用緩存等功能。這是你將在你的網絡服務器上啓用的東西,我想你的情況是IIS。

+0

是的,我通過在Visual Studio中運行應用程序來測試它。 我想要做的就是禁用永久緩存,以便webbrowsers每次從服務器加載頁面,而不是從緩存中加載頁面。 – XXL 2010-09-22 09:48:02

+0

回來至少3個瀏覽器的測試,因爲這可能是瀏覽器相關的。 – mare 2010-09-22 10:48:08

1

我看到過一些類似的行爲,與IE7中的javascript有關。瀏覽器'有幫助'意識到你最近請求了這個URL,因此提供了緩存版本。如果是這種情況,解決方案是通過添加一個僞隨機數來確保URL是唯一的。我使用類似於:

function refresh() 
{ 
    window.location.href = sURL + "?rnd="+ Math.random(); 
}