Frage

Ich bin mit sitzungsbasierte Cookies mit meiner Website. Zu meiner völligen Überraschung, bemerkte ich, wenn ich ein Session-Cookie (keine dauerhaftes Cookie) gesetzt, eine Registerkarte schließen, und dann auf der Seite wieder, die Session-Cookies immer noch da. Das ist nicht das, was ich erwartet hätte, eigentlich. Ich hätte die Session-Cookies erwartet gelöscht werden.

Wenn Sie den Browser schließen, wird eine Session-Cookie wird gelöscht, warum also nicht einen Tab schließt das gleiche Ergebnis haben?

Deshalb verwende ich PHP5 und jQuery. Gibt es etwas, was ich tun kann, so dass, wenn ein Tab geschlossen wird, ich diese Sitzung Problem beheben kann? Leider ist das onbeforeunload Ereignis auf dem BODY-Tag nicht nützlich hier, weil, wenn Sie von einer Seite klicken, um es dieses Ereignis ausgelöst wird, nicht nur ein Tab geschlossen wird.

War es hilfreich?

Lösung

Der Session-Cookie ist Pro-Prozess nicht pro Fenster. Also selbst wenn Sie neues Browser-Fenster ausgewählt würden Sie immer noch die gleiche Session-ID bekommen. Dieses Verhalten macht Sinn. Sie würden keinen Benutzer wollen sie erneut Zeichen in jeder Zeit ein neues Fenster geöffnet, während Ihre Website durchsuchen.

Ich bin mir nicht bewusst, aus der Hand von wirklichem Weg, um diesen.

Andere Tipps

Das ist von Entwurf und versucht, es zu ändern, eine sehr schlechte Idee ist. Was passiert, wenn ein Benutzer öffnet einen Link in einem neuen Tab und schließt das? Sollte die Sitzung in dem ursprünglichen Registerkarte zerstört werden? Natürlich nicht! Dies zeigt, warum Sie nicht einmal darüber nachdenken sollten.

Eine Sitzung endet, wenn der letzte Browser-Fenster schließt. Wenn Sie etwas anderes wollen, Sie:

  1. will nicht, Sitzungen;
  2. müssen Sie Ihre eigene "Mini-Sitzung" Infrastruktur machen;
  3. ist wahrscheinlich in einer Welt von Schmerz und Bugs.

Sie können auch eine Javascript schreiben, der erkennt, wenn ein Tab geschlossen wird, und das Cookie in der Javascript löschen

Session Web-Speicher anstelle von Cookies verwendet werden, wenn Sie auf der Registerkarte Schließung müssen abhängig zu sein.

ich eine Arbeit um gefunden.

Ich arbeite in ASP.NET C#. Ich habe einen Master Page für alle Seiten der Website mit Ausnahme der Login Seite. Im Master Page Sever Page Load event erhalte ich die Url der verweisenden Seite und überprüfen, ob es die Wurzel der der Site enthält, wenn ich nicht auf die Login Seite umleiten und da es nicht, dass Master Page hat es angezeigt wird.

Dies funktioniert, wenn ich versuche, auf eine Seite von einer anderen Seite zu erhalten oder wenn ich die Url auf das Adressfeld des Browsers eingeben. Also, wenn Sie die Registerkarte zu schließen und Sie versuchen, von einem anderen Tab erneut einzugeben oder die Registerkarte erneut öffnen, auch tho das Cookie nicht getötet worden ist, können Sie die Seite nicht erneut eingeben, ohne durch Login zu gehen. Dies funktioniert auch, wenn Sie nicht auf die Registerkarte und Ihre Navigation zwischen verschiedenen Standorten in dem gleichen Registerkarte geschlossen.

Dies ist der Code

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

Wenn Sie von innerhalb der Website navigieren, es gibt kein Problem, selbst wenn Sie einen Link zu einer anderen Seite in der Website auf einen anderen Tab öffnen sie sich öffnet.

Wenn Sie zusätzlich sicher sein wollen, können Sie die Sitzung und Authentifizierungscookie in dieser if Klausel zu töten, bevor auf die Login Seite redircting.

Das wird nicht funktionieren, wenn ein Benutzer an einem anderen Ort in dem gleichen Registerkarte navigiert und drückt die Browser-Taste back to, weil das auf Cache arbeitet und nicht automatisch eine Anfrage an den Server senden.

So hat das auf die Sitzung oder Authentifizierungscookie nicht tötet die Registerkarte zu schließen, aber es kann die Website verhindern reentering ohne Anmeldung nach dem Tab geschlossen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top