[PHP] Wer ist online?

Flatscho

Ensign
Registriert
Sep. 2002
Beiträge
197
Ich nochmal! ;-)

Über eine SQL Tabelle, wo ich alle User meiner "Community" gespeichert habe, frage ich einfach ab, wer im Moment online ist.

Dazu habe ich beim Einloggen ein UPDATE in der entsprechenden Spalte gemacht usw., genauso ein UPDATE beim normalen Ausloggen.
Code:
$eintragen = "UPDATE alleuser SET logggedin='j' where login='$login'";
mysql_query($eintragen,$link);

Mein Problem nun: wenn jemand nicht normal über den "Ausloggen-Button" sich ausloggt, sondern einfach nur den Browser schließt. Also muss man irgendwie auch das "logggedin='n' " setzen, wenn die Session expired ist oder so ähnlich? Was ist der richtige Ansatz und wie geht das?

thx


Oder kann man vielleicht direkt der MySQL-Tabelle sagen, dass die Spalte logggedin automatisch nach 5 Min. oder auf 'n' gesetzt wird? Was ist die geschickteste Lösung?
 
Zuletzt bearbeitet:
also ich (und ich schätze mal auch viele andere ;)) mache das so, dass so lange jemand eine Aktion ausführt auf der HP, er als online mit Zeitstempel gespeichert wird, nach 2 Minuten läuft dieser dann aus und der User wird als offline wieder deklariert
 
Sorry, hab ich nicht ganz gerafft ;-(

Also z.B. in meine index.php ein SQL-Update auf eine Spalte "letzteAktion" o.ä. mit dem aktuellen Zeitstempel?

Und dann (auch in die index.php) den normalen "Ausloggen"-Code wenn der Zeitstempel größer als 120 Sek. ist?

Meinst Du das so?
 
ja, wenn du mit "Ausloggen"-Code meinst, dass er als offline gilt ;)
 
hmpf, und kannst Du mir vielleicht auch noch sagen, wie man das mit einem aktuellen Timestamp macht?

mit getdate() ???

das gibt doch ein array zurück und ist blöd zum speichern.
 
ich speichere einfach in einem Datenfeld vom Typ varchar der Länge 10 die aktuelle Zeit time();

danach wird verglichen die aktuelle Zeit time(); mit dem gespeicherten Wert: überschreitet die aktuelle Zeit time(); den gespeicherten Wert um 120 (= 2 Minuten), wird der Eintrag gelöscht
 
Das geht dann aber auch schneller direkt in der Query, zumindest bei MySQL.
MySQL hat eine eigene Funktion, die UNIX_TIMESTAMP() heißt.

wenn du also sowas schreibst :

Code:
INSERT INTO tabelle (meinTimestamp) VALUES (UNIX_TIMESTAMP());

bekommst du das aktuelle Timestamp in das angegebene Feld.
Wenn du MySQL Timestamps haben willst, nimm die Funktion NOW() um die aktuelle Zeit zu bekommen.
Zum rechnen sind aber Unix Timestamps besser geeignet, wie du sicher schon festgestellt hast.
Außerdem braucht man für den Rückgabewert von time() kein VARCHAR, es reicht ein normales INT. Das ist dann auch noch platzsparend.
 
Zurück
Oben