Frage

Ich möchte das Login, Logout und Dauer Zeit in der Datenbank speichern.

  • Die Anmeldezeit erstellt wird, wenn der Benutzer authentifiziert ist (erfolgreich angemeldet)
  • Die Abmeldezeit wird erstellt, wenn der Benutzer den Logout-Button klickt
  • Die Dauer ist logout - Anmeldezeit. (Abmeldung minus login)

Aber das Problem ist, was passiert, wenn der Benutzer didnt den Logout-Button klicken. Hier sind die Situationen:

  • Internet Verlust
  • Schließen Sie den Browser / Tab. (Ich brauche diese Javascript verwenden müssen, aber ich donnu, wie es geht, eine Idee?)

EDIT:

ich etwas auf die Frage hinzuzufügen vergessen habe, ist das Programm ein vollständiges Flash-Programm, gibt es keine Navigation zu anderer Seite. Nur noch 1 Seite

War es hilfreich?

Lösung

Sie können nicht darauf verlassen, ein Ereignis für die Benutzer abzumelden auf Empfang, wenn sie einfach ihren Browser schließen, oder aus dem Internet verschwinden.

In diesem Fall werden Sie ein Session-Timeout irgendeine Art haben müssen, und notieren Sie die Abmeldung, wenn die App erkennt ihre Sitzung zu alt ist.

Wenn dies eine echte Voraussetzung ist, dann würde ich sagen, dass Sie eine „cron“ Job Überwachung der Sitzungen für Timeout. Wenn eine Sitzung abgelaufen ist, wenn die angemeldet wurden, es zeichnet dann ein „Logout“ Ereignis für diesen Benutzer.

Beachten Sie, dass Sie nicht (zum Beispiel) ASPNET der Session_End Ereignis verwenden können, denn das ist nicht zuverlässig entweder aufgerufen wird (zum Beispiel, wenn der Server-Prozess neu gestartet wird).

Eine weitere Option ist die Abmeldezeit beim nächsten Mal, dass Benutzer anmeldet hinzufügen - wenn sie sich anmelden, Sie alte Sitzungen prüfen und davon ausgehen, dass jeder, der für eine bestimmte Zeit nicht geschlossen wurde seit dem letzten Seite Hit dauerte.

Das ist wirklich alles, was Sie tun können.

Andere Tipps

Es ist wichtig, sich daran zu erinnern, dass alle Sitzungs / log-in-Funktionen in PHP sind in der Regel Cookies in Ihrem Browser. Also, die Änderung der Lebensdauer des Session-Cookie sollte Ihr Problem lösen:

http://us3.php.net /manual/en/function.session-set-cookie-params.php

Sie können aber auch die PHP-Sessions so eingestellt, dass sie nur Cookies verwenden:

http: // us2 .php.net / manual / en / session.configuration.php # ini.session.use-only-Cookies

Auch hier können Sie das Browser-Fenster / Tab schließen fangen, aber ... warum? Zum Beispiel kann ich Ihre Website offen in mehreren Tabs haben. Wenn ich eine dieser Registerkarten schließen soll ich automatisch aus Ihrer Website protokolliert werden? Das ist ein sehr schlechtes Design. Stattdessen legen die Lebensdauer einer Sitzung so erlischt es, wenn der Browser geschlossen ist und nicht nur eine Registerkarte. (Beachten Sie auch, dass window.unload wird abzumelden, wenn jeder Fenster auf Ihrer Website, die geschlossen wird.? - mit einem Pop-up oder ein iframe Sie wirklich, dass wollen)

http: //us2.php .net / manual / en / session.configuration.php # ini.session.cookie-Lebensdauer

Wenn Sie den Sitzungszustand in einer Datenbank speichern wollen versuchen, ein ein von diese führt . Oder rollen Sie Ihre eigene mit session_set_save_handler

In Bezug auf das Schließen des Browsers / Tab können Sie das unload Ereignis binden (window.onunload, jQuery $(window).unload(fn) oder jede andere) dem Server zu benachrichtigen. Eine Allzweck-Lösung wäre in regelmäßigen Abständen Ihren Server anpingen (sagen wir, alle 5 min), aber es könnte für den Benutzer, so tun so umsichtig ärgerlich sein.

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