Frage

Ich habe eine Verpflichtung für eine explizite Logout-Button für Benutzer in einem ASP.NET Web-App. Ich bin mit IIS6 mit Standardauthentifizierung (SSL). Ich kann auf eine andere Webseite umgeleitet, aber der Browser hält die Sitzung am Leben. Ich habe um gegoogelt und fand einen Weg, es zu tun durch eine aktive x-Steuerung ermöglicht mit IIS zu kommunizieren und die Sitzung zu töten. Ich bin in einer eingeschränkten Umgebung, die nicht die Formularauthentifizierung und ActiveX-Steuerelemente erlaubt sind auch nicht verboten. Hat jemand anderes diese Anforderung hatte und wie haben Sie es behandelt?

Okay, das ist, was ich habe Angst. Ich habe ähnliche Antworten auf dem Netz gesehen und ich habe gehofft, dass jemand einen Weg, es zu tun haben würde. obwohl Vielen Dank für Ihre Zeit. Ich glaube, ich Javascript verwenden kann, die Zurück-Taste wie die history.back ()

zu verhindern
War es hilfreich?

Lösung

Ich war mit diesem selbst für ein paar Tage zu kämpfen.

Mit dem IE spezifischen ‚document.execCommand('ClearAuthenticationCache');‘ ist nicht für jedermann eine gute Wahl: 1) es spült alle Anmeldeinformationen, was bedeutet, dass der Benutzer zum Beispiel auch von seiner gmail oder einer anderen Webseite abgemeldet, wo er zur Zeit ist authentifiziert 2) es ist nur IE;)

Ich habe versucht, mit Session.Abandon () und dann zu meiner Default.aspx umleitet. Dies allein reicht nicht aus. Sie müssen explizit dem Browser mitteilen, dass die Anforderung, die gemacht wurde, ist nicht autorisiert. Sie können dies tun, indem sie mit so etwas wie:

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

Dies wird in dem folgende Ergebnis: Der Benutzer klickt auf die Logout-Button ==> wird er das Grund Login-Fenster. ABER: wenn er Flucht drückt (der Login-Dialog verschwindet) und Hits zu aktualisieren, der Browser automatisch die Anmeldeinformationen erneut sendet, so dass der Benutzer angemeldet werden, obwohl er ihm könnte denken, abgemeldet

.

Der Trick dies zu lösen, ist immer ein einzigartiges ‚Reich‘ ausspucken . Dann wird der Browser erneut die Credentials nicht in dem oben beschriebenen Fall. Ich entschied mich für das aktuelle Datum und die Uhrzeit auszuspucken.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

Eine andere Sache, die Sie tun müssen, ist dem Browser mitteilen, die Seite nicht cachen:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

Mit all diesen Dingen im Ort funktioniert es (für mich) in IE, aber bis jetzt war ich noch nicht in der Lage firefox zu verhindern, in dem Benutzer anzumelden, wenn der Benutzer zuerst drückt entkommen (versteckt den grundlegenden Dialog Login) und dann auffrischen (F5) oder der Browser zurück-Taste.

Andere Tipps

Die Session.Abandon Methode zerstört alle in einer Session gespeicherten Objekte Objekt und gibt ihre Ressourcen. Wenn Sie nicht die Methode explizit Abandon nennen, zerstört der Server diese Objekte, wenn die Sitzung beendet wird.

Haben Sie Session.Abandon in Reaktion auf den Button klicken versucht, ruft an?

Bearbeiten :

Es scheint dies ein klassisches Back-Button Thema ist.

Es gibt sehr wenig Sie über die Zurück-Taste tun. Stell dir vor, der Benutzer hat nur die aktuelle Seite in einem neuen Fenster geöffnet, dann die Schaltfläche Abmelden klicken, wird die Seite, um sich abzumelden, aber es wird nicht sofort den Inhalt des anderen Fensters beeinflussen.

Nur wenn sie versuchen, irgendwo in diesem Fenster navigieren wird es offensichtlich, dass ihre Sitzung ist weg.

Viele Browser implementieren die Zurück-Taste in einer ähnlichen (wenn auch nicht identisch) Art und Weise. zurück zur vorherigen Seite zu gehen ist nicht unbedingt eine Navigation für eine HTML / HTTP Sicht.

Dies ist eine Lösung für dieses Problem, das in IE6 arbeitet und höher.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

Gefunden dies aus http://msdn.microsoft.com/en- us / library / bb250510% 28VS.85% 29.aspx

Webteam in Kurz Ihre Credentials, bitte

. F: Jerry B. schreibt: „Nachdem der Benutzer bestätigt hat und seine Anfrage bearbeitet, habe ich jetzt entkräften will, dass ihn diese Maschine Unter der Annahme, in einer offenen Umgebung ist, wo jeder konnte gehen und wir es, ich will ein werfen neue Herausforderung jedes Mal, wenn ein Benutzer ein bestimmtes Modul auf der Web-Zugriffe. "

A: Dies ist eine häufig nachgefragte Funktion des Internet Explorer-Teams und die gut Leute dort über haben uns einen Weg gegeben es in Internet Explorer 6.0 SP1 zu tun. Alles was Sie tun müssen, ist die execCommand Methode auf dem Dokument aufrufen, in ClearAuthenticationCache als Befehlsparameter übergeben, wie folgt aus:

document.execCommand("ClearAuthenticationCache");

Dieser Befehl leert alle Anmeldeinformationen im Cache, so dass, wenn der Benutzer eine Ressource anfordert, die eine Authentifizierung benötigt, wieder die Aufforderung zur Authentifizierung erfolgt.

Ich habe dies auf meiner Logout-Link-Taste und es funktioniert in IE6 sp1 und höher:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top