簡體   English   中英

ASP.NET MVC 2緩存問題

[英]ASP.NET MVC 2 caching problem

我正在編寫一個應用程序,遇到了無法解決的緩存問題。

我有一個默認的Home控制器,用於檢查用戶是否通過身份驗證的站點。 如果不是,則顯示“登錄視圖”,否則客戶端將重定向到另一個頁面。

除LogOn視圖外,還將向用戶發送一個Check cookie,以檢查其瀏覽器是否支持cookie。

當我在發送帶有憑據的表單之前刪除cookie時,Home控制器中的Home(Post方法)會顯示一條消息,指出必須使用一個按鈕啟用cookie,該按鈕應該會刷新帶有登錄框的頁面( 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);
    }
}

問題是如果我立即單擊該按鈕刷新“登錄頁面”,瀏覽器將使用其緩存讀取它。 但是當我在幾秒鍾后執行此操作時,查詢將發送到服務器。 這是錯誤的,因為“登錄”頁面還應該再次創建一個“檢查Cookie”。

在我看來,緩存策略設置為1-2秒,然后從服務器重新加載頁面。

怎么了? 感謝幫助。

我已經看到一些類似的行為,與IE7中的javascript有關。 瀏覽器“有幫助”地意識到您最近請求了該URL,因此提供了緩存的版本。 在這種情況下,解決方案是通過添加偽隨機數來確保每次URL都是唯一的。 我用類似的東西:

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

我是說您正在通過在Visual Studio中運行它進行測試嗎?

據我所知,您無法在Visual Studio Development Server中啟用諸如緩存之類的功能。 這是您將在Web服務器上啟用的功能,在您的情況下,我想它將是IIS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM