2012-04-03 12 views
2

Ich habe einen Logout-Button auf meiner Seite, dieWie verhindere ich, dass ich nach dem Schließen des Tabs mit x zu meiner Site zurückkehren kann, ohne mich einzuloggen?

FormsAuthentication.SignOut() 

zwingt die Notwendigkeit, wieder einmal einzuloggen löst, wenn man die Zurück-Button im Browser oder Kopie verwendet/Pasten die URL. Wenn Sie jedoch die Registerkarte mit der Schaltfläche x des Browsers schließen und ein weiterer Tab geöffnet ist, wird die Seite beim Kopieren/Einfügen der URL wieder geöffnet, ohne sich einzuloggen. Dies ist ein schwerwiegendes Sicherheitsproblem. Wenn der Browser vollständig geschlossen wurde, indem alle Tabs geschlossen werden, geschieht dies nicht. Wie kann ich verhindern, dass die URL nach dem Schließen des Tabs wieder angezeigt wird, auch wenn der Browser nicht vollständig geschlossen wurde? Gibt es eine Möglichkeit, ein OnClose-JavaScript-Ereignis abzufangen, das FormsAuthentication.SignOut() auslöst? Ich arbeite in asp.net C#.

+1

Sind Sie besorgt, wenn der Benutzer Javascript deaktiviert? – villecoder

+4

Wie ist dieses sehr häufige Browser-/Benutzerverhalten ein "ernsthaftes Sicherheitsproblem"? –

+0

Was ist, wenn die andere Registerkarte, die sie geöffnet haben, * Ihre Website * ist? Ihre vorgeschlagene Lösung würde sie ausloggen, obwohl sie noch auf Ihrer Website sind. –

Antwort

0

Sie können Javascript im Fenster onbeforeunload Ereignis verwenden, um einen Anruf auf Ihrer Website zu tätigen und den Benutzer abzumelden.

1

Das ist ein Browsersitzungsproblem.

Eine Browsersitzung (in der Tat der Cookie, der die Sitzungs-ID enthält, wird beim Schließen des Browsers gelöscht) endet erst, wenn der Browser geschlossen wird. Aus diesem Grund loggen Sie sich nicht aus, wenn Sie nur einen Tab schließen, ohne den gesamten Browser zu schließen.

Es gibt keinen Grund, den Benutzer abzumelden, wenn er nur einen Tab schließt. Dieses Verhalten ist nicht Standard im Web und Benutzer können desorientiert sein, wenn Sie das tun.

Aber vergiss, wenn Sie das tun möchten, können Sie ein paar Javascript schreiben, die ein Popup ablegen, um den Benutzer zu warnen, er muss sich abmelden, bevor er geht. Verwenden Sie dazu das Ereignis unload oder onbeforeunload.

Schauen Sie sich hier, um Beispiele: How to create popup window when browser close

+0

Kann es direkt getan werden, ohne ein Popup zu öffnen? –

0

Warten, der Benutzer verfügt über zwei Registerkarten auf Ihrer Website öffnen und sie „Logout“ in nur einem Klick, aber nicht in der anderen? Gut, dann haben sie sich nicht wirklich ausgeloggt - die Sitzung ist immer noch aktiv. Ich sehe, wie das ein Problem sein kann. Aber es ist kein Sicherheitsproblem, es ist nur der gleiche Benutzer, der angemeldet bleibt.

Wie auch immer, Sie können zum Beispiel eine neue Sitzungsvariable erstellen, die Sie mit einem Wert füllen, wenn sich der Benutzer anmeldet und Sie löschen, wenn sich der Benutzer abmeldet Überprüfen Sie dann in jedem Page Load diese Variable und leiten Sie sie zur Anmeldeseite weiter, wenn sie nicht existiert.

Könnte ein wenig Overkill sein, aber es ist alles Server-Seite und Sie brauchen kein Javascript, um es zu tun.

+0

Mein Problem ist nicht 2 Tabs auf meiner Website geöffnet, es ist 1 auf meiner Website und 1 auf einem anderen und wenn der Tab meiner Website geschlossen ist, können Sie durch die andere Registerkarte ohne Logg-in. –

+0

@DovMiller Hm, dass sollte nicht passieren. Die Sitzung sollte dann beendet werden. Trotzdem denke ich, dass meine Lösung funktionieren sollte. Kannst du es versuchen? –