Gibt es eine zuverlässige Möglichkeit zum anmelden eines Benutzers aus, wenn der browser geschlossen ist?
Ich bin auf der Suche nach eine zuverlässige Möglichkeit zum Abmelden eines Benutzers oder verlassen der Sitzung, wenn der browser geschlossen wird. Gibt es eine Möglichkeit, dies zu tun mit tabbed-Browser?? Anregungen werden geschätzt. Danke!
- Verwenden session-nur cookies, die nur bestehen, die Länge der Browser-Sitzung (d.h. bis der Benutzer den browser schließt).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keinen zuverlässigen Weg, dies zu tun sofort, wenn der Kunde den browser schließt. Es gibt die
beforeunload
Ereignis, aber auch dann, wenn Sie das Feuer ein ajax-request bei dieser Veranstaltung, es ist nicht garantiert, um immer auf dem server angekommen. Dann noch, Sie habe ein problem mit mehreren browser-tabs.Zuverlässigste Weg ist, um einen relativ kurzen session-timeout im server-Seite (z.B. 1 minute) und die Einführung eines ajaxbased Herzschlag auf der client-Seite (z.B. alle 30 Sekunden), um die session am Leben.
Kann es bessere Möglichkeiten, je nach die einzige funktionale Anforderung, für die Sie dachten, dass dies die Lösung. Zum Beispiel, wenn Ihr tatsächlichen Absicht ist es, zu beschränken, alle Anmeldungen zu 1, - pro registrierter Benutzer sind, dann sollten Sie besser sammeln Sie alle logins und die damit verbundenen Sitzungen und dann vergleichen Sie diese auf jede Anmeldung und erlöschen der früheren Sitzung, wenn alle anwesend. Auf diese Weise werde es der Arbeit als auch auf clients mit dem JS deaktiviert.
Wenn Sie nicht verwenden cookies, um bewahren Sie Ihre Benutzer-login-Informationen, es sollte melden Sie sich, wenn Sie den browser schließen, weil keine session-cookies sollten getötet werden, wenn der browser geschlossen wird.
Natürlich ist dies nicht immer der Fall (siehe hier für ein Beispiel von Firefox Erhaltung der login-Daten nach der Abmeldung), da "Sitzung wiederherstellen" Funktionen, die wir jetzt verwischen die Linie zwischen dem, was als eine "browser-session". (Persönlich, ich denke, das sollte als Fehler klassifiziert, aber das ist nur meine Meinung).
Gibt es zwei mögliche Techniken. Die erste wäre (wie yojimbo87 erwähnt vor mir) zur Nutzung von web-sockets eine Verbindung zwischen client und server, und wenn der socket geschlossen wird, die Sitzung zu beenden. Das Problem hier ist, dass web sockets-Unterstützung ist begrenzt, und ist sicherlich nicht möglich, auf etwas anderes als bleeding edge Browser (FF4, Chrome, IE9, etc).
Alternative könnte sein, die AJAX verwenden, um ständig den server Abfragen zu sagen, dass die Seite noch geöffnet ist, so dass, wenn Sie beispielsweise das senden einer keep-alive-Anfrage per AJAX alle 30 Sekunden, würden Sie speichern den Zeitstempel der Anfrage in der Sitzung. Wenn der Benutzer dann kommt Sie zurück zu der Seite und den Zeitunterschied zwischen der aktuellen Anfrage und der letzten Anfrage ist mehr als sagen... 45 Sekunden (Bilanzierung Latenz), wüsstest du, dass der user geschlossen, Ihre browser-und wieder anmelden müssen.
In beiden Situationen gibt es jedoch einen fatalen Fehler, und das ist, dass Sie verlassen sich auf JavaScript. Wenn der Benutzer kein JavaScript aktiviert hat, würde Sie am Ende ruinieren die Erfahrungen der Benutzer mit ständigen login-Aufforderungen, das ist natürlich eine schlechte Idee.
Meiner Meinung nach, ich denke, es vernünftig zu verlassen sich einfach auf die session-cookies werden durch den browser gelöscht, wenn der Benutzer schließt das browser-Fenster, weil das ist, was Sie tun sollen. Sie als Entwickler können nicht verantwortlich gemacht werden, wenn der client-browser führt unerwünschtes Verhalten, da seine völlig aus der Hand, und es gibt kein funktionierendes workaround.
Eine praktikable Methode wäre die Verwendung von AJAX für das senden von keep-alive-requests auf die Server Recht oft, z.B. jede minute. Dann könnten Sie eine Sitzung Abbrechen, sobald ein keep-alive - (oder ein paar in der Reihenfolge) ist nicht erhalten, als erwartet.
Sonst, es gibt keine zuverlässige Methode um das zu erreichen. Da es keine permanente Verbindung zwischen dem browser und dem server Sie nicht erkennen kann, Situationen, die out-of-control-von der JavaScript-code, die Sie haben könnten, die im browser ausgeführt. Zum Beispiel, wenn es einen Netzwerkfehler, möchten Sie vielleicht, um die Sitzung zu schließen, auch wenn das browser-Fenster ist immer noch geöffnet. Daher soll das system robust genug ist, sollten Sie erkennen, Netzwerk-Ausfälle als "Nebeneffekt" der keep-alive-Mechanismus aus dem browser (z.B. Gmail funktioniert).
Es sei denn, Sie sind mit WebSockets oder irgendeine Art von long-polling für jede Registerkarte, die Spuren der Verbindung mit client-in "Echtzeit", werden Sie wahrscheinlich warten müssen, bis die Sitzung durch Zeitüberschreitung der server-Seite.
Können Sie dies über eine Kombination von Jquery,Ajax und PHP
Die Jquery -
Die vor dem entladen Skript
php müssten Sie selbst schreiben, die ich bin mir mehr als sicher, dass Sie tun können.
es ist nicht die zuverlässigste, aber es ist der einfachste Weg, zu realisieren, dass. wenn Sie möchten, Echtzeit-reporting .. schau in den Kometen