ASP.NET MVC 2 проблема с кэшированием - PullRequest
2 голосов
/ 22 сентября 2010

Я пишу приложение и столкнулся с проблемой кеширования, которую я не могу решить.

У меня есть домашний контроллер по умолчанию для сайта, который проверяет, аутентифицирован ли пользователь или нет. Если нет, то отображается LogOn View, в противном случае клиент перенаправляется на другую страницу.

Наряду с представлением LogOn пользователю также отправляется файл cookie для проверки, чтобы проверить, поддерживает ли его браузер файлы cookie или нет.

Когда я удаляю cookie перед отправкой формы с учетными данными, Home (метод Post) в контроллере Home отображает сообщение о том, что куки должны быть включены с помощью кнопки следует обновить страницу с полями входа в систему (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 секунды, и по истечении этого времени страницы перезагружаются с сервера.

Что не так? Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Я видел похожее поведение, связанное с JavaScript в IE7. Браузер «услужливо» понимает, что вы недавно запросили этот URL, и, следовательно, отображает кэшированную версию. Если дело обстоит так, решение состоит в том, чтобы удостовериться, что URL уникален каждый раз, добавляя псевдослучайное число. Я использую что-то вроде:

function refresh()
{
    window.location.href = sURL + "?rnd="+ Math.random();
}
0 голосов
/ 22 сентября 2010

Правильно ли я сказал, что вы тестируете это, выполняя это в Visual Studio?

Насколько я знаю, вы не можете включить такие вещи, как кэширование в Visual Studio Development Server. Это то, что вы включите на своем веб-сервере, который, я думаю, будет IIS в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...