User Online + Count etc.

Sephcom

Mitglied
Google schon seit paar Stunden, aber habe leider noch nicht genau das gefunden, was ich suche.

Das Problem:
Ich habe ein Login-Script, mit Registrierung und allem drum und dran.
Ein User registriert sich, die Daten werden in der Datenbank gespeichert (Passwort in MD5 Hash).
Klappt alles wunderbar, auch der Login und alles.
Nur kann man nun von einem anderen PC oder mit einem anderen Browser sich ebenfalls mit dem selben Account einloggen. D.h. man ist mehrmals eingeloggt.

Lösung des Problems ist im Prinzip >
User loggt sich ein, in der Datenbank wird loggedin auf 1 gesetzt
(mysql_query("UPDATE accounts SET loggedin = 1 WHERE ...");)

Jetzt kann ich beim Einloggen ja überprüfen:
mysql_query("SELECT * FROM accounts WHERE login = ... AND loggedin != 1");

Wenn das der fall ist > Login erfolgreich, wenn nicht, ausgabe "User bereits eingeloggt" oder iwie sowas...

Aber wenn nun der Benutzer sich nicht mit LOGOUT wieder ausloggt, wird der Datenbank eintrag nicht wieder auf 0 gesetzt.
Problem?
User schließt Browser = Sessions werden gelöscht
User geht wieder auf die Seite, keine Sessions vorhanden = Loggout
Er versucht sich einzuloggen, Datenbank sieht > loggedin = 1 > Datenbank denkt > User noch eingeloggt

Wie kann ich überprüfen ob der User noch online ist, z.B. ob die Session's noch existieren?

Hoffe ihr versteht was ich meine...

MfG
 
Du erstellst ein weiteres Feld, das du logintime nennst oder so,
darin speicherst du den Zeitpunkt des Logins.

Sollte sich der User jetzt nicht ausloggen und danach wieder einloggen,
weißt du wieviel Zeit seitdem vergangen ist und kannst,
wenn die Zeitspanne größer ist als 5min, 30min, 1 Stunde den Benutzer erneut einloggen lassen.

Du sagst also, die Session ist nach 5min, 30min, 1 Stunde wieder freigegeben.

Allerdings kann der User sich wenn er den Browser geschlossen hat,
sich nicht nochmal direkt einloggen, er muss warten bis die 5min, 30min, 1 Stunde
um sind.
 
Zuletzt bearbeitet:
Hi,

an einem ähnlichen Problem/einer ähnlichen Aufgabe sitze ich derzeit auch :)
Eine Idee wäre:
Es gibt doch JavaScript Skripte, die z.B. ein PopUp beim Verlassen der Seite öffnen. Es müsste doch möglich sein, dass man statt dem Popup ein Script aufruft, dass mit der session userid den eintrag updated, oder irre ich mich da?

Greetz
 
JavaScript ist immer eine heikle Sache:
Was ist denn, wenn jemand Javascript deaktiviert hat?

Außerdem könnte man ja auch den PC direkt ausschalten - ohne den Browser zu schließen.
 
Aber mit beidem in kombination kann das schon sehr hilfreich sein, das würde ich mir mal genauer anschauen an deiner Stelle.
 
Du erstellst ein weiteres Feld, das du logintime nennst oder so,
darin speicherst du den Zeitpunkt des Logins.

Sollte sich der User jetzt nicht ausloggen und danach wieder einloggen,
weißt du wieviel Zeit seitdem vergangen ist und kannst,
wenn die Zeitspanne größer ist als 5min, 30min, 1 Stunde den Benutzer erneut einloggen lassen.

Du sagst also, die Session ist nach 5min, 30min, 1 Stunde wieder freigegeben.

Allerdings kann der User sich wenn er den Browser geschlossen hat,
sich nicht nochmal direkt einloggen, er muss warten bis die 5min, 30min, 1 Stunde
um sind.

Das hat allerdings den großen Nachteil > wenn der Benutzer länger als 5min, 30min, 1 Stunde eingeloggt ist, d.h. die entsprechende Zeit aktiv ist, ist nach ablauf dieser Zeit die funktion des Multi-Login wieder möglich...
 
Naja, sagen wir mal so, es muss immer überprüft werden, ob der Benutzer die Rechte hat die Dateien zu sehen, die er anfordert.
Bei der Prüfung kann man dann auch gleich das logintime-Feld updaten mit der aktuellen Zeit.
 
Folgende Idee:

User loggt sich ein
in der Datenbank ist loggedin für den account bereits auf 1
IP wird überprüft, ists die gleiche > loggin erfolgreich

des weiteren:
Bei jedem Linkklick wird ein Script ausgeführt, welches eine variable in der datenbank (Beispielsweise "activetime") auf die momentane Zeit gestellt.
bei jedem Login werden alle "online accounts" (also accounts bei denen loggedin=1) wie folgt überprüftt:
Weist die oben definierte activetime eine differenz von mehr als 30min zur momentanen zeit auf, so wird beim entsprechenden User loggedin auf 0 gesetzt

Möglich...+ umständlich...gibts iwelche Lücken in der Idee?
 
Da haben wir dann auch das Problem mit den Multilogins nach einer gewissen Zeit (5, 30, 60 min),
wenn ich davon ausgehe, das "activetime" global ist.

Der entsprechende Logintimestamp müsste immer aktualisiert werden,
wenn der Benutzer eine Aktion macht, also das was ich über dir geschrieben habe.
 
Da haben wir dann auch das Problem mit den Multilogins nach einer gewissen Zeit (5, 30, 60 min),
wenn ich davon ausgehe, das "activetime" global ist.

Der entsprechende Logintimestamp müsste immer aktualisiert werden,
wenn der Benutzer eine Aktion macht, also das was ich über dir geschrieben habe.

Hab ich doch gesagt xD
Ich mach in den Headbereich jeder datei
PHP:
mysql_query("UPDATE accounts SET activetime = NOW();");
 
Zurück