Frage

In meiner PHP-Anwendung, ich bin mit $ _SESSION zu verfolgen, ob ein Benutzer angemeldet ist. Wenn ein Benutzer Blatt jeder Seite auf meiner Website unter http://mysite.com und geht an http://someotherwebsite.com , ich wollen sie automatisch abzumelden, so dass, wenn sie auf http://mysite.com , die sie benötigen, zum Login erneut.

Gibt es eine einfache Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Sie können nicht explizit sagen, wenn ein Benutzer Blätter Ihre Website, Ihre beste Wette wäre, um einen Timeout auf Ihren Sitzungen zu implementieren.

Wie die meisten Antworten gesagt haben, Sie könnte überprüfen Sie mit dem JavaScript-Event onbeforeunload aber der Benutzer kann durch Pass dies durch JavaScript zu deaktivieren oder, wie BalusC hatte darauf hingewiesen, einen Web-Browser, der nicht unterstützt wird, wie Opera.

Deshalb glaube ich stark ein Timeout auf Sitzungen der Umsetzung ist der beste Weg, um eine Abmeldung zu erzwingen.

Andere Tipps

Sie können einen AJAX-Aufruf in der onbeforeunload Veranstaltung zu einem gewissen Server-Seite Skript, das die Sitzung töten.

Mit Ausnahme von einem Timeout auf Ihren Sitzungen setzen - nicht wirklich. Der einzige Weg, dass in dem Sinne kommt, ist das onbeforeunload JavaScript-Ereignis, das ausgelöst wird, wenn die Benutzer Blätter die aktuelle Seite, aber das Ereignis nicht weiß, mit der Benutzer wird. Sie könnten jedoch, wenn Sie wirklich wollen, dies zu tun, vielleicht bauen etwas auf der Grundlage der folgenden Hacky Abhilfe (ungetestet):

  • gesetzt ein onbeforeunload Ereignis, das einen AJAX-Aufruf an den Server sendet. (Wie dies erfolgreich zu tun - so der Anruf durchkommt, bevor die Seite geschlossen wird -. Ist ein Thema für sich, eine Suche nach „onbeforeunload Ajax“ auf SO sollten einige Ergebnisse liefern

  • Der Aufruf Ajax würde einen Countdown starten sagen, dass diese Sitzung des Benutzers im Begriff ist zu sterben in etwa 15 Sekunden.

  • Wenn der Benutzer Ihre Website verlässt, gilt der Countdown.

  • Wenn der Benutzer zu einer anderen Seite auf Ihrer Website geht, Sie löschen alle „die“ Countdowns, wenn die nächste Seite zu dienen.

Dies ist wahrscheinlich wackelig sein, weil es, dass ein Ajax-Request passieren könnte, Start ein Countdown auf dem Server ankommt, nachdem die nächste Seite hat bereits eliminiert , dass Countdown. Aber wenn Sie das wirklich tun müssen, kann dies eine Richtung sein. Works für Benutzer mit JS nur aktiviert, natürlich.

Eine zweite Idee, wie dies umzusetzen wäre eine extrem niedrige Timeout auf Sitzungen setzen (zum Beispiel 90 Sekunden), und ein iframe setzt auf jeder Seite, die Sie dienen. Das iframe würde dann alle 60 Sekunden ein Aufruf an die Seite stellen.

Dies würde ohne JavaScript funktionieren, aber lästiges Klickgeräusch in älteren Versionen von Internet Explorer erstellen könnte (ich weiß nicht, ob das in 6 oder 7 gestoppt?)

Sie können nicht (aber Ihre Sitzungen werden nach Zeitüberschreitung automatisch eine Weile, so dass Sie das Timeout auf eine kurze Zeit einstellen könnten).

Von dem, was ich weiß, über PHP (was nicht viel ist) würde auch immer Ihre Anwendung weiß, dass sie die Seite verlassen? Wenn Sie someotherwebsite.com gehen, wird Ihr Code nicht erneut aufgerufen, bis sie zurückkehren.

leider nicht wirklich, Dies ist eines der großen Probleme mit Web-Anwendungen. Ihre Anwendungen haben keine Möglichkeit zu wissen, dass der Browser auf eine andere Webseite bewegt hat.

Wie ChristohpeD erwähnt Sie die Session-Timeout einstellen. Denken Sie daran, dass Ihre Website wird nur die Zeit aktualisiert werden, wenn der Server einen Beitrag oder eine Art von JavaScript-ping recieves.

Hoffe, das hilft

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