2013-05-02 17 views
20

So che questa è una domanda popolare in StackOverflow. Ho affrontato tutte le stesse domande e non sono in grado di trovare la risposta giusta per me. Questo è il mio log out regolatore di Azione RisultatoCome cancellare la cache del browser sul pulsante Indietro del browser fare clic su MVC4?

[Authorize]  
    public ActionResult LogOut(User filterContext) 
    { 
     Session.Clear(); 
     Session.Abandon(); 
     Session.RemoveAll(); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
     Response.Cache.SetNoStore(); 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Home", true); 

    } 

Non ha funzionato per me. Ho anche provato adding-

<meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Expires" content="0"/>

nessuno di questi ha risolto il mio problema.

+1

Torna a dove? Dovunque? O solo un'azione specifica? – mattytommo

risposta

46

Il problema con il tuo approccio è che lo stai impostando dove è già troppo tardi perché MVC lo applichi. Le seguenti tre righe del codice devono essere inserite nel metodo che mostra la vista (di conseguenza la pagina) che non si desidera mostrare.

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
Response.Cache.SetNoStore(); 

Se si desidera applicare il "no cache del browser di nuovo" comportamento in tutte le pagine, allora si dovrebbe mettere in global.asax.

protected void Application_BeginRequest() 
{ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
    Response.Cache.SetNoStore(); 
} 
+4

Perché questo non è stato accettato e perché non è stato più ottimizzato? Dopo ore di googling questa è l'unica soluzione che funziona su tutti i browser. –

+3

signore, sei il mio eroe per oggi. – Saturnix

+0

funziona molto bene. Grazie! – cocojiambo

13

Basta impostare la cache di output sull'azione. Ho usato questo metodo in molti progetti:

[HttpGet, OutputCache(NoStore = true, Duration = 1)] 
public ActionResult Welcome() 
{ 
    return View(); 
} 

L'attributo di cui sopra sarà essenzialmente istruire il browser per ottenere una nuova copia della pagina dal tuo azione di controllo se l'utente si sposta avanti/indietro alla vista.

È inoltre possibile definire la memorizzazione nella cache in web.config e utilizzare insieme a questo attributo per evitare alcune ripetizioni. Vedi here

+0

Grazie, ha funzionato alla grande. – Dave

+0

Questo mi ha davvero aiutato. Questa soluzione è la soluzione migliore per questo caso se si desidera memorizzare nella cache file/immagini statici, ecc. Ma non si desidera memorizzare nella cache le pagine (viste). – mmushtaq

Problemi correlati