2010-09-22 8 views
2

J'écris une application et j'ai rencontré un problème de mise en cache que je n'arrive pas à résoudre.Problème de mise en cache d'ASP.NET MVC 2

J'ai un contrôleur Home par défaut pour le site qui vérifie si l'utilisateur est authentifié ou pas. Si ce n'est pas le cas, LogOn View s'affiche, sinon le client est redirigé vers une autre page.

Avec la vue LogOn, un cookie Check est également envoyé à l'utilisateur pour vérifier la réponse si son navigateur prend en charge les cookies.

Lorsque je supprime le cookie avant d'envoyer le formulaire avec les informations d'identification, Home (méthode Post) dans le contrôleur d'accueil affiche un message que les cookies doivent être activés avec un bouton qui devrait actualiser la page avec des boîtes d'ouverture de session (http://localhost:1234/)

ce bouton est lié à la fonction de rafraîchissement js:

var sURL = unescape("/"); 

function refresh() 
{ 
    window.location.href = sURL; 
} 

J'ai mis en œuvre CacheFilter qui est fixé sur le contrôleur de base.

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); 
    } 
} 

et le problème est que si je clique immédiatement sur le bouton pour actualiser la page LogOn, le navigateur l'a lu en utilisant son cache. Mais quand je le fais après quelques secondes, la requête est envoyée au serveur. Ceci est faux, car la page LogOn devrait également créer à nouveau un cookie Check.

Il me semble que la politique de cache est fixée à 1-2 secondes, et après ce temps, les pages sont rechargées à partir du serveur.

Qu'est-ce qui ne va pas? Merci pour l'aide.

+0

Dans quel navigateur êtes-vous en train de tester? Ou tous les navigateurs ont le même problème? –

+1

Il a été testé sous firefox, IE bahaves probablement le sam way .. mais va le vérifier plus tard – XXL

Répondre

0

Ai-je raison de dire que vous êtes en train de tester cela en l'exécutant dans Visual Studio? Pour autant que je sache, vous ne pouvez pas activer la mise en cache dans le Visual Studio Development Server, par exemple. C'est quelque chose que vous allez activer sur votre serveur web, ce que je suppose sera IIS dans votre cas.

+0

Oui, je suis en train de tester en exécutant l'application dans Visual Studio. Tout ce que je voulais faire est de désactiver la mise en cache permanente afin que les webbrowsers puissent charger la page à chaque fois depuis le serveur, jamais depuis le cache. – XXL

+0

reviens avec un test d'au moins 3 navigateurs, car cela pourrait être lié au navigateur. – mare

1

J'ai vu un comportement similaire, lié au javascript dans IE7. Le navigateur "utilement" se rend compte que vous avez récemment demandé cette URL et sert donc la version en cache. Si tel est le cas, la solution consiste à s'assurer que l'URL est unique à chaque fois en ajoutant un nombre pseudo-aléatoire. J'utilise quelque chose comme:

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