2010-04-21 8 views
26

Ich bin auf der Suche nach einer Lösung für den Benutzer verwenden Sie die Zurück-Taste des Browsers, um zur vorherigen Seite zu navigieren, sobald ausgeloggt.ASP.NET Authentifizierung anmelden und abmelden mit Browser zurück Schaltfläche

Ich habe eine Webanwendung in asp.net erstellt und einen benutzerdefinierten Mitgliedschaft-Anbieter für Authentifizierung und Autorisierung verwenden. Alles funktioniert einwandfrei, außer wenn der Benutzer auf den Logout-Link klickt, um sich von der Anwendung abzumelden und auf ein Standard-Deckblatt umgeleitet wird. Wenn der Benutzer auf die ZURÜCK-TASTE in seinem Browser klickt, wird er tatsächlich dorthin zurückkehren, wo er vorher war Die Daten werden weiterhin angezeigt.

Natürlich können sie nichts auf dieser Seite tun, klicken Sie auf irgendeinen Link, sie werden wieder zu einer Login-Seite umgeleitet. Aber diese Informationen anzuzeigen, verwirrt viele Benutzer.

Ich frage mich nur, ob es eine Möglichkeit gibt, ich kann entweder den Browserverlauf löschen, so kann nicht zurück gehen, oder wenn sie auf den Zurück-Knopf klicken und sie auf die Anmeldeseite umleiten lassen.

dank

+1

+1 für eine gute Frage. +1 für eine gute Frage -1 knapp geschlagen für schlechte Schlussfolgerung. –

+0

das war aus meiner Faulheit ~ werde es wieder versuchen – Eatdoku

Antwort

21

sich Gedanken über die Browser-History und Zurück-Taste wird Ihnen Kopfschmerzen und Genitalwarzen geben. Es sind Einrichtungen eingebaut, um dieses Problem zu lösen.

Ihr Abmeldelink/Schaltfläche sollte auf eine Seite zeigen, die diesen Code enthält, zusammen mit dem, was Sie sonst noch möchten.

[vb.net]

Imports System.Web.Security 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
Handles MyBase.Load 
    Session.Abandon() 
    FormsAuthentication.SignOut() 
End Sub 

[C#]

using System.Web.Security; 

private void Page_Load(object sender, System.EventArgs e) 
{ 
    // Put user code to initialize the page here 
    Session.Abandon(); 
    FormsAuthentication.SignOut(); 
} 

-Code stammt aus dieser page und gültig ist, aber die Seite ist schwer auf den Augen.

Eine gute Frage/Antwort bezüglich des Verhaltens der Rücktaste kann here gefunden werden.

Update:

nach dem Gespräch, das ich mit Matthew habe, deaktivieren Caching auf einzelnen Seiten, die sensible oder volitile sind, können solche mit Code wie folgt vorgenommen werden:

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

Ich bin Neugierig zu wissen, ob es für dich genauso funktioniert wie für mich.

+3

Dies ist nicht die Antwort auf diese Frage. – nima

+0

Deaktiviert dies auch das Caching von css/js? Vielen Dank: D –

+0

@Sky Sanders - Warte, hast du nicht jemand in einer Antwort unter dieser Response.Cache.SetCacheability (HttpCacheability.NoCache) erzählt, war er "seinen Verstand verloren?". Egal, ich mag immer noch deine Antwort – deebs

3

Sie können Javascript verwenden, um die Zurück-Schaltfläche zu deaktivieren (in der Regel durch Senden des Benutzers an eine Seite, die an eine andere Seite weiterleitet, so dass ein Klick zurück Sie erneut weiterleitet). Ein persistenter Benutzer kann immer noch 2 Schritte zurück in den Verlauf gehen und die Schleife überspringen.

Diese Seite befindet sich im Cache des Browsers. Sie können den Browser bitten, nichts zwischenzuspeichern, aber das wird die Leistung manchmal dramatisch ruinieren, also würde ich es nicht empfehlen.

+1

Matthew, warum schlagen einen Hack, wenn es Funktionalität eingebaut ist, um das Problem zu behandeln? –

+0

Session.Abandon und FormsAuthentication.SignOut weist den Browser nicht an, den Cache zu löschen (und der Browser und die Proxies dazwischen müssen keinen No-Cache-Header berücksichtigen). Die zwischengespeicherten Seiten können weiterhin geladen werden, und wenn a Die Anfrage wird von einer Seite im Client-Cache gestellt, nachdem die Sitzung nicht verknüpft ist. Sie kann nicht sagen, was das Ergebnis sein wird, wahrscheinlich NullReferenceExceptions, wenn die Seite beginnt, Sitzungsvariablen zu überprüfen (und auf die Anmeldeseite umgeleitet wird). – MatthewMartin

+0

Dann sollte No-Cache diskret auf sensiblen oder flüchtigen Seiten eingestellt werden, die nicht wiederbelebt werden sollten. Sie können den Client nicht steuern und versuchen, Komplexität hinzuzufügen. Wenn sie nach dem Abmelden 3 Klicks auf eine 'Seite abgelaufen' setzen möchten ..?!?! mehr Macht für sie. Wie auch immer, ich bin nicht dogging Sie sagen nur ... p.s. Verwende @sky um sicherzustellen, dass ich Antworten auf Kommentare bekomme. –

-3

tatsächlich habe ich eine Lösung gefunden, ich habe das folgende Snippet auf der Seite geladen Methode der Masterseite hinzugefügt.

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

danke für die Antwort sowieso :)

+7

Hey, dreh dich um, ich denke, du hast deinen Verstand irgendwo verloren ... ;-p Das ist wie der Versuch, eine Uhr mit einem Vorschlaghammer zu reparieren. Um es freundlich auszudrücken, dies qualifiziert sich für eine DWTF. Bitte ueberlege es Dir nochmal. –

+0

in Ordnung !! ... lass es mich nochmal versuchen :) – Eatdoku

0

können Sie versuchen, die Httpresponse verwenden.Cache-Eigenschaft, wenn das helfen würde:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["Category"] = true; 

if (Response.Cache.VaryByParams["Category"]) 
{ 
//… 
} 

Oder könnte Caching der Seite zusammen mit HttpResponse.CacheControl blockieren könnte, aber sein für die Cache-Eigenschaft als veraltet oben:

Response.CacheControl = “No-Cache”; 

oder Sie könnten gehen wirklich Nüsse und das alles von Hand:

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 

Reference

1

Dieser Code ist sehr nützlich

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Nur diesen Code setzt auf Load-Ereignisse, auf den Master-Pagen bei, aber es funktioniert nur für IE, für IE und Firefox verwendet I

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
1

Your Answer

Eine Abhilfe hierfür ist die folgende JavaScript-Code zu dem Abschnitt der logout.aspx Seite hinzufügen:

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

Dieser JavaScript-Code leitet den Benutzer zurück, wenn der Benutzer durch Drücken der Zurück-Taste auf die Abmeldeseite gelangt.

Wenn Sie der Benutzer, um sicherzustellen, keine Möglichkeit hat, zu den Seiten zurück zu bekommen, nachdem sie abzumelden Sie den Browser fragen dürfen nicht auf jeder Seite ähnlich den folgenden einschließlich Code eine der Seiten cachen:

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