web-dev-qa-db-fra.com

Après la déconnexion, si le bouton de retour du navigateur est enfoncé, il revient au dernier écran.

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");
    }
20
Karan Prince

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.

57
AthibaN

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="">
10
Murali Murugesan
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
0
Anup Shetty

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!

0
ravenx30
  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);
    }
0
Amit Rana