Bonjour, je suis en train de développer une solution dans MVC pour la première fois, donc je suis confronté à un gros problème, Lorsque je me déconnecte de mon application (application Web mvc razor), il affiche la page de connexion, mais si je clique sur le bouton Précédent du navigateur, il affiche le dernier écran , je ne veux pas cela, je veux si j'appuie sur le bouton retour il affiche toujours la même page de connexion . voici mon code pour la déconnexion
public ActionResult Logout()
{
Session.Clear();
Session.Abandon();
Session.RemoveAll();
FormsAuthentication.SignOut();
this.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
this.Response.Cache.SetCacheability(HttpCacheability.NoCache);
this.Response.Cache.SetNoStore();
return RedirectToAction("Login");
}
J'ai eu ce problème il y a un moment, la désactivation du cache pour toute l'application a résolu mon problème, ajoutez simplement cette ligne au fichier Global.asax.cs
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
J'espère que cela t'aides.
Vous devez ajouter la balise META
cache pour toute la dernière page visitée.
Alors ajoutez ceci pour toutes les pages, en créant un CustomAttribute comme [NoCache]
et décorer
public class NoCacheAttribute : 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.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
public class AccountController : Controller
{
[NoCache]
public ActionResult Logout()
{
return View();
}
}
Ou essayez-le avec javascript sur la page comme
<SCRIPT type="text/javascript">
window.history.forward();
function noBack() { window.history.forward(); }
</SCRIPT>
<BODY onload="noBack();"
onpageshow="if (event.persisted) noBack();" onunload="">
protected void Application_BeginRequest()
{
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Expires = -1500;
Response.CacheControl = "no-cache";
Response.Cache.SetNoStore();
}
Add [Authorize] filter on each controller
Le moyen le plus simple pour une application MVC 5 est:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
Au-dessus de chacune des méthodes de contrôleur, vous ne souhaitez pas mettre en cache. Ou si vous utilisez .Core les travaux suivants:
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
Bonne journée!
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
string emailAddress = null;
var cookie =Request.Cookies[FormsAuthentication.FormsCookieName];
// Nothing to do if no cookie
if (cookie != null)
{
// Decrypt the cookie
var data = FormsAuthentication.Decrypt(cookie.Value);
// Nothing to do if null
if (data != null)
{
// Deserialize the custom data we stored in the cookie
var o = JsonConvert.DeserializeObject<FormsAuthenticationTicketData>(data.UserData);
// Nothing to do if null
if (o != null)
emailAddress = o.EmailAddress;
}
}
SetupAutoFac(emailAddress);
}