2011-06-09 222 views
1

在我的asp.net mvc項目中,當登錄的用戶註銷並按回按鈕時,他們可以回到頁面並訪問需要您登錄的數據。ASP.Net MVC禁用瀏覽器緩存(firefox)

我已經添加了這個頁面,默認頁:

HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false); 
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
    Response.Cache.SetValidUntilExpires(true); 

這是我的電話註銷控制器:

Welcome <b><%= Html.Encode(Page.User.Identity.Name)%></b>! 
     <%-- [ <%= Html.ActionLink("Logout", "Logout", "Home")%> ]  --%> 
       <a href="#" onclick="Javascript:DisableHistory()"> Logout</a> 

function DisableHistory() { 
      alert("testing123"); 
      window.history.forward(1); 
      window.location = "http://localhost/test.web/Home.aspx/Logout"; 

     } 



     public ActionResult Logout() 
     { 
      FormsAuthentication.SignOut(); 

      return RedirectToAction("Index", "Home"); 

     } 

這種情況只有在Firefox。我如何避免它緩存該頁面。

+0

可能的重複[如何禁用ASP.NET MVC中的客戶端和代理緩存?](http://stackoverflow.com/questions/860678/how-can-i-disable-client-side-and-代理緩存功能於ASP淨MVC) – 2011-09-10 10:17:47

回答

0

請爲Firefox

context.Response.Headers.Add("Cache-Control", "no-cache"); 
context.Response.Headers.Add("PRAGMA", "no-cache"); 
2

的正確方法是返回響應頭,而不是修改HTML頁面設置的標題。

創建一個新的屬性:

public class DisableCacheAttribute: ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.RequestContext.HttpContext.Response.AddHeader("Pragma", "no-cache"); 
     filterContext.RequestContext.HttpContext.Response.AddHeader("Expires", "-1"); 
     filterContext.RequestContext.HttpContext.Response.AddHeader("Cache-Control", "no-cache, no-store"); 
     base.OnActionExecuting(filterContext); 
    } 
} 

,並用它在你的行動:

[DisableCache] 
public ActionResult YourMethod() 
{ 
    return new Content("This is not cached"); 
} 

這個屬性也將與IE瀏覽器具有更積極的緩存。