Nachdem sich der Benutzer erfolgreich angemeldet hat, speichere ich login = true in der Datenbank. Aber wie überprüfe ich, ob der Benutzer sich abgemeldet hat, indem ich den Browser geschlossen habe, ohne auf den Logout-Button zu klicken? Und wie kann ich Benutzer, die für 10 Minuten inaktiv waren, auf die Anmeldeseite umleiten?
Ich verwende PHP und MySQL. Jede Hilfe wäre willkommen.
BEARBEITEN: Entschuldigung, wenn meine Frage nicht klar ist. Ich habe Sitzung verwendet, um zu speichern, ob sie eingeloggt sind oder nicht. Aber jetzt möchte ich die Informationen in der Datenbank speichern, damit ich ihren Status auf anderen Seiten anzeigen kann. Angenommen, user1 hat 3 Freunde. Bei der Anzeige aller seiner Freunde möchte user1 wissen, ob seine Freunde online oder offline sind. Das ist was ich will. Irgendwelche Ratschläge?
2017 edit: Heutzutage ist es am besten, wenn Sie Websockets verwenden, um die Präsenz auf einer Seite / Site zu verfolgen.
Sie können nicht erkennen, wenn ein Benutzer seinen Browser schließt oder mit PHP von Ihrer Website aus navigiert. Die JavaScript-Techniken sind so weit von der Garantie entfernt, dass sie nutzlos sind.
Stattdessen ist es am besten, die letzte Aktivitätszeit jedes Benutzers zu speichern.
Speichern Sie den Zeitstempel jeder Aktivität des Benutzers. Wenn diese Zeit vor mehr als 10 Minuten liegt, loggen Sie sich ab.
In PHP könnten Sie so etwas tun:
%Vor%Dasselbe kann stattdessen in der Datenbank vorgenommen werden. Dort könntest du sogar eine Liste von Nutzern bekommen, die "gerade" online sind.
Sie fragen sich, ob Sie erkennen können, ob ein Benutzer seinen Browser geschlossen hat. Sie können irgendwie mit Javascript, aber ich würde nicht darauf verlassen (seit Javascript ist einfach zu deaktivieren) Aber Sie können nicht mit PHP, da PHP nur ausgeführt wird, wenn Sie eine Seite anfordern. Nicht wenn die Seite geöffnet ist.
Um sicher zu gehen, sollten Sie die letzte Aktivität des Benutzers verfolgen und wenn es einige Minuten (5/10) vergangen ist, dann nehmen Sie an, dass der Benutzer weg ist. Wenn er aber wieder etwas macht (zum Beispiel nach 6 Minuten), ist er wieder online.
Wenn Sie versuchen, die online aktiven Benutzer zu verfolgen, sollten Sie möglicherweise eine Sitzung für den einzelnen Benutzer verwenden. Speichern Sie die letzte Aktivität, anstatt login = true in der Datenbank zu speichern, um ihren Status für Sie oder andere anzuzeigen Zeit für den Benutzer. Wenn Sie Ihre Liste der Online-Benutzer aufrufen, erstellen Sie Ihre SQL-Abfrage, um nur Benutzer mit 'Last_activity' innerhalb der letzten 10 Minuten zurückzugeben.
Dies ist eine Erweiterung zu was "
Lassen Sie die Benutzer den Dienst regelmäßig pingen und sagen, dass sie noch angemeldet sind. Speichern Sie die letzte Ping-Zeit in der Sitzung. Wenn die letzte Ping-Sitzung länger als eine besagte Zeit ist, ping erneut, um zu signalisieren, dass die Anwendung noch aktiv ist.
Speichern Sie die Uhrzeit, zu der Sie den Ping in der Datenbank erhalten haben. Wenn der letzte empfangene Ping & gt; Der Keeplive-Schwellenwert ist dann der Ansicht, dass der Benutzer die Site verlassen hat.
Im Folgenden finden Sie einen nicht getesteten Beispielcode, mit dem Sie beginnen können. Mit "PING__FREQUENCY" können Sie steuern, wie oft die Benutzeraktivität die Spalte last_activity aktualisiert.
%Vor%IMHO der beste Weg ist, Zeitstempel der letzten Aktivität in DB bei jeder Aktualisierung des Benutzerdatensatzes zu speichern. Nach dem Abmelden oder Timeout (Timeouts mit Cronjob beibehalten) setze es einfach auf Null und benutze es als Flag.
%Vor%Manchmal müssen Sie etwas sagen. like "last seen on ...", dann lass die letzte Aktivität und füge einfach ein boolesches Flag (tinyint) logged_in zu deiner Benutzertabelle hinzu.
Sie können dies mit einer Kombination von Möglichkeiten tun, höchstens 2, ich schätze, mit der letzten Aktivität, kombinieren Sie es mit jQuery, um nach Inaktivität zu suchen, das sind keine Maus- oder Tastaturereignisse für einige Zeit, Sagen Sie etwa 10 bis 20 Minuten, dann, sobald die Leerlaufzeit bestätigt ist, führen Sie einen AJAX-Aufruf an eine PHP-Datei durch, die Ihre Datenbanktabelle aktualisiert, die den Benutzer offline zeigt.
Sie können beginnen mit:
%Vor%