2009-02-26 15 views
10

Il nostro problema è che siamo in grado di cancellare la sessione al logout.Come disattivare il pulsante Indietro nel browser quando l'utente si disconnette in asp.net C#

Ma se un utente fa clic sul pulsante Indietro, può passare attraverso tutte le schermate precedenti.

Ma il vantaggio è che con un solo clic su una qualsiasi di queste pagine di navigazione precedenti riportiamo l'utente alla pagina di accesso, l'avevamo fatto. Ma il nostro requisito è che non dovremmo consentire all'utente di passare attraverso la pagina precedente.

+0

controllo questa soluzione. funziona bene http://geekswithblogs.net/Frez/archive/2010/05/18/back-button-issue-after-logout-in-asp.net.aspx – Syed

+0

anche consultare http://stackoverflow.com/a/28458499/2089963 – Syed

risposta

1

È possibile utilizzare lo stile Outlook Web Access e semplicemente chiudere JavaScript la finestra/scheda corrente.

Inoltre, è possibile assicurarsi che la pagina di "disconnessione" sia un postback. Ciò costringerà l'utente su un pulsante Indietro nella maggior parte dei browser a riprovare il postback, a quel punto è possibile rilevare che non sono più connessi e reindirizzare nuovamente alla pagina di accesso.

Modifica: Qualcun altro ha citato un Response.Redirect. Potresti in effetti rendere il tuo link di "disconnessione" andare a una pagina che esegue un reindirizzamento e SEMPRE reindirizzare a una seconda "pagina di destinazione". Se l'utente fa clic su "Indietro", atterra nuovamente sul reindirizzamento e li rimette dove sono stati avviati.

Non c'è modo di impedire la cronologia del browser, quindi è importante utilizzare un paio di metodi insieme e non pianificare su un utente "non andare indietro" per garantire la sicurezza dell'applicazione.

12

È necessario forzare la cache a scadere affinché funzioni. Sto cercando il codice di esempio per te.

EDIT
Abbiamo trovato questo per voi, la sua già stato affrontato qui sul SO.

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Here...

+0

+1 ho pensato di aggiungere questo alla mia risposta, ma mi ha battuto per farlo! – Brandon

2

Per le pagine ASP.NET è possibile utilizzare Response.CacheControl per controllare come una pagina viene memorizzato in una cache utenti. Altri linguaggi di sviluppo Web utilizzeranno qualcosa di simile.

7

Non è possibile "disabilitare" il pulsante Indietro. Ci sono numerosi "trucchi" che ho visto che possono cancellare la cronologia posteriore, ma questi sono inaffidabili e non funzionano dal browser al browser, o anche dalla versione del browser alla versione del browser.

Come altri hanno già detto, il metodo corretto invalida la cache, insieme alla convalida lato server che la sessione non è più valida se tenta di inviare nuovamente i dati. Inoltre, Response.Redirect funziona meglio di un postback, poiché ciò causa un get piuttosto che un post.

+0

Tra tutte le risposte date, questa è la più completa e corretta che risponde direttamente alla domanda. Sfortunatamente, ho solo un voto. ;-) – Cerebrus

10

scrivere questo codice in Master pagina in caso di caricamento della pagina

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

e scrivere questo codice in Pagina di login nella sezione di testa

<script type="text/javascript"> 
window.history.forward(-1); 
</script> 
+0

Non funziona il safari mobile –

0

Questa è la soluzione che ho trovato su Coding Solutions

nella pagina master

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ClearHeaders(); 
     Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
     Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
     Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
     Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
     Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
    } 

controllo LoginStatus

protected void LoginStatusUser_LoggedOut(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     FormsAuthentication.SignOut(); 
    } 
Problemi correlati