ASP.Net MVC отключить кеширование браузера (firefox) - PullRequest
1 голос
/ 09 июня 2011

В моем проекте 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 ]

2 голосов
/ 09 июня 2011

Правильный способ - вернуть заголовки ответа и не изменять 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, который имеет более агрессивное кэширование.

0 голосов
/ 09 июня 2011

Пожалуйста, установите заголовок для FireFox

context.Response.Headers.Add("Cache-Control", "no-cache");
context.Response.Headers.Add("PRAGMA", "no-cache");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...