Bonjour,
J'ai un site en asp.net/mvc4/razor.
J'ai fait une action disconnect qui appelle Session.Abandon() suivi d'un return View();
Le Session.Abandon() génère un appel à la methode Session_End() du fichier global.asax.cs. A l’intérieur de celui-ci, je fais un Session.RemoveAll(); pour supprimer toutes mes variables de session. Je ne fais pas ce dernier appel directement dans mon action car cela me permet de gérer du même coup la suppression des variables de session lorsque le timeout est atteint.
Le vue que je retourne dans mon action affiche des choses en fonction des variables de session.
Le problème est que mon appel à la suppression des variables de session n'arrive qu'après l'affichage de la vue, laors que j'ai pourtant fait l'appel avant. Je me retrouve avec une vue affichant des infos qui devraient être à blanc. Comment est-ce que je peux m'assurer que tout ce qui découle de l'appel à Session.Abandon(); est bien effectué avant l'affichage généré par mon return View() s'il vous plaît?
Je gère également déjà la suppression du cache de la manière suivante :
Dans la méthode RegisterGlobalFilters(GlobalFilterCollection filters) du global.asax.cs, j'ajoute ceci : filters.Add(new DisableCache());
Et voici ma classe DisableCache:
Je me dis qu'il doit y avoir un fonctionnement asynchrone, mais dans ce cas, comment est-ce que je peux forcer Session.Abandon() à finir tous ces appels avant que la ligne qui suit "return View()" s'exécute?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class DisableCache : ActionFilterAttribute { 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(); } }
D'avance merci,
Julien
Partager