starus eines users. entweder online oder offline

Kurt Cobain

Erfahrenes Mitglied
hallo

hab mir ein login script gemacht immer wenn sich ein user einloggt wird die mysql reihe auf online gesetzt. so:
PHP:
$update = "UPDATE users SET  status = 'online' WHERE user = '$user' ";
$updatetrue = mysql_query($update) or die (mysql_error());


und beim logout steht dashier: logout.php
PHP:
$update = "UPDATE users SET  status = 'offline' WHERE user = '$user' ";
$updatetrue = mysql_query($update) or die (mysql_error());

und mein problem ist, dass wenn ein user vergisst auf logout.php zu drücken und dann einfach den browser schließt, dass er dann ganze zeit den status online hat.

wie kann man mein problem lösen, dass er dann automatisch auf offline gesetzzt wird

danke
 
Zum Beispiel, indem du der Datenbank eine Spalte "lastAction" o.ä. zufügst, in die du jeweils den Zeitpunkt des letzten Seitenaufrufs des Users speicherst. Liegt der Zeitpunkt eine gewisse Spanne x zurück, dann hat er sich zwischendurch wohl ausgeloggt.
 
Indem du eine neue Spalte in SQL anlegst (vorzugsweise dort, wo du auch die restlichen Iinformationen des Users speicherst; bei dir dann wohl in der Tabelle 'user'). Diese Spalte nenns du time (oder sonst wie) und achtest darauf, dass es der Feldtyp 'timestamp' ist.

Nun musst du eine Abfrage auf jeder deine Seite machen, ob der User nun eingeloggt ist oder nicht. (am besten durch ein include() zu bewerkstelligen) Ist der User eingeloggt, lässt du die Spalte 'time' in der Tabelle 'user' updaten.

Ebenfalls muss in diesem Script eine Abfrage, die alle User aus deine Login-tabelle löscht, deren letzte Aktivität länger als 10 (15,20, x) Minuten zurückliegt.
 
Wieso musst du denn überhaupt eine Tabelle anlegen wo drinnsteht ob online oder nicht?
Du kannst doch einfach die Spaltet Time als Varchar machen und da den Unix Timestamp reinlegen. Dann kannst du bei der Online Anzeige Alle User aus der Tabelle users Selecten und nur die als online zeigen, bei denen die Spalte Time größer als
PHP:
$on = time()-XXX;
ist, wobei XXX die Sekunden sind, nach enen man als Offline gilt
Gruß GalaxyWarrior
 
Wieso musst du denn überhaupt eine Tabelle anlegen wo drinnsteht ob online oder nicht?
Du kannst doch einfach die Spaltet Time als Varchar machen und da den Unix Timestamp reinlegen. Dann kannst du bei der Online Anzeige Alle User aus der Tabelle users Selecten und nur die als online zeigen, bei denen die Spalte Time größer als
PHP-Code:
$on = time()-XXX;

ist, wobei XXX die Sekunden sind, nach enen man als Offline gilt
Gruß GalaxyWarrior

Weil das nicht einer normalisierten Datenbank entsprechen würde.

tschü
yersi
 
Hallo,

Yersinia hat gesagt.:
Weil das nicht einer normalisierten Datenbank entsprechen würde.
Gegen welche Normalform verstößt dieser Ansatz denn? Jetzt mal abgesehen davon, dass der Feldtyp VARCHAR hier ungeeignet ist.

GalaxyWarrior hat gesagt.:
Wieso musst du denn überhaupt eine Tabelle anlegen wo drinnsteht ob online oder nicht?
Weil man sonst nicht feststellen könnte, ob sich ein Benutzer manuell ausgeloggt hat.

Grüße,
Matthias
 
Zurück