PHP Übersicht der angemeldeten User - wie User-Anzeige löschen beim Verlassen der Seite?
echo $freundliche_begruessung;
Ich möchte gerne eine Übersicht der Benutzer, die auf meiner Seite angemeldet sind, erstellen. Das Herausfinden des Users ist ja kein Problem. Jeder User, der sich anmeldet, kann ich ja einfach in eine Datenbank schreiben. Wenn sich der User wieder (korrekt) abmeldet – die Sessions geschlossen wird – könnte ich den User auch wieder löschen. Alles kein Problem!
Nur, was ist, wenn der User das Browser-Fenster einfach schliesst? (Was ja leider oft der Fall ist xD) Dann bleibt mein Eintrag ja in der DB vorhanden. Und mit JavaScript irgendwie abfragen, ob das Fenster geschlossen ist, hilft mir ja auch nicht viel, da ich aus JavaScript keine SQL Abfragen senden kann.
An einen Timer, der den User nach einer gewissen Zeit löscht, habe ich auch schon gedacht. Nur wo soll dieses Script laufen?
Kennt jemand eine Lösung? Wie macht man das sonst so? Es gibt ja viele Seite (hier im Forum ja auch), wo man sieht, wer angemeldet ist.
Danke und Gruss
Marco
Ich möchte gerne eine Übersicht der Benutzer, die auf meiner Seite angemeldet sind, erstellen. Das Herausfinden des Users ist ja kein Problem. Jeder User, der sich anmeldet, kann ich ja einfach in eine Datenbank schreiben. Wenn sich der User wieder (korrekt) abmeldet – die Sessions geschlossen wird – könnte ich den User auch wieder löschen. Alles kein Problem!
Nur, was ist, wenn der User das Browser-Fenster einfach schliesst? (Was ja leider oft der Fall ist xD) Dann bleibt mein Eintrag ja in der DB vorhanden. Und mit JavaScript irgendwie abfragen, ob das Fenster geschlossen ist, hilft mir ja auch nicht viel, da ich aus JavaScript keine SQL Abfragen senden kann.
An einen Timer, der den User nach einer gewissen Zeit löscht, habe ich auch schon gedacht. Nur wo soll dieses Script laufen?
Kennt jemand eine Lösung? Wie macht man das sonst so? Es gibt ja viele Seite (hier im Forum ja auch), wo man sieht, wer angemeldet ist.
Danke und Gruss
Marco
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146992
Url: https://administrator.de/contentid/146992
Ausgedruckt am: 19.11.2024 um 20:11 Uhr
9 Kommentare
Neuester Kommentar
Wie du schon sagtest, beim login -> DB schreiben.
Logout -> aus der DB löschen.
Das sollte klar sein. Nun brauchst du eine art "Cronjob". Du musst zusätzlich ein "Timestamp" speichern wann der User die letzte Seite geladen hat. Diese bei jedem Seitenaufruf aktualisieren.
Wenn die Zeit größer ist als z.B. 2min kann man davon ausgehen das er nicht mehr online ist -> aus der DB löschen.
Den Cron dann z.B. jede Minute einmal aufrufen lassen.
Oder einfach bei jedem Seitenaufruf, so intensiv ist das SQL Statement nun auch nicht ;)
Logout -> aus der DB löschen.
Das sollte klar sein. Nun brauchst du eine art "Cronjob". Du musst zusätzlich ein "Timestamp" speichern wann der User die letzte Seite geladen hat. Diese bei jedem Seitenaufruf aktualisieren.
Wenn die Zeit größer ist als z.B. 2min kann man davon ausgehen das er nicht mehr online ist -> aus der DB löschen.
Den Cron dann z.B. jede Minute einmal aufrufen lassen.
Oder einfach bei jedem Seitenaufruf, so intensiv ist das SQL Statement nun auch nicht ;)
Wo ist das Problem?
Du fügt in der DB einen Timestamp
Den Timestamp aktualisierst du bei jedem Seitenaufruf.
Viel mehr lässt sich eigentlich darüber streiten ob es Sinn macht hierfür extra einen Haufen aufwändiger DB-Abfragen zu stellen...
Du fügt in der DB einen Timestamp
last_seen
hinzu und suchst dann bei den angemeldeten usern nach WHERE last_seen > (NOW() - 5)
Den Timestamp aktualisierst du bei jedem Seitenaufruf.
Viel mehr lässt sich eigentlich darüber streiten ob es Sinn macht hierfür extra einen Haufen aufwändiger DB-Abfragen zu stellen...
Warum für jede Seite ein SQL abfrage? Du sagst doch eben selber das du eine Datei hast und den rest "includest". Dann brauchst du nur in der einen Datei den SQL Befehl eintragen, mehr nicht.
Der SQL Befehl wird nichtmal eine Millisekunde dauern, das sollte nicht das Problem sein.
Umständlich ist das rein garnicht. Kinderkram ist das, du machst es dir nur einfach zu schwierig.
Man könnte es noch mit JavaScript kombinieren, aber nicht jeder hat es aktiviert.
Der SQL Befehl wird nichtmal eine Millisekunde dauern, das sollte nicht das Problem sein.
Umständlich ist das rein garnicht. Kinderkram ist das, du machst es dir nur einfach zu schwierig.
Man könnte es noch mit JavaScript kombinieren, aber nicht jeder hat es aktiviert.