ASP.Net MVC禁用浏览器缓存(firefox)

时间:2011-06-09 17:19:37

标签: javascript asp.net-mvc firefox

在我的asp.net mvc项目中,当登录用户注销并按回按钮时,他们可以返回页面并访问需要您登录的数据。

我已将此页面添加到默认页面:

    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中。如何避免缓存该页面。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

请设置FireFox的标题

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