Vom Server geöffnete Sessions abfragen

Tservarius

Mitglied
Hallöchen!
Mich bewegt eine Frage, auf die ich leider keine Antwort finde:

Ist es möglich eine Anfrage an den Server per PHP zu starten, welche Sessions
der Server momentan geöffnet hat und wenn ja : wie ?

Hintergrund:
Ich habe einen Bereich in den sich die User einloggen können, dabei wird halt eine Session für jeden User geöffnet. Jetzt habe ich halt noch eine Onlineabfrage die anzeigt welche User gerade online sind. Damit diese Anzeige immmer stimmt muss der User sich jedensmal ausloggen - das aber nicht jeder User sich immer ausloggt würde ich gerne eine Abfrage basteln die überprüft, welche User Sessions aktiv sind und den Sessions halt den User zurückzuweist und den Onlinestatus auf 1 setzt.

Lange rede, kurzer Sinn .- wer kann helfen :-)

Thx
Tservari
 
Nein sowas geht prinzipiell nicht.
Die einzige Möglichkeit wäre, den Ordner auszulesen, in dem die Session Dateien abgelegt werden (std. ist /tmp).
Dies ist aber eine sehr unzuverlässige Methode.

Das beste was du machen kannst, um dein Problem zu lösen: Ein Timeout für jeden User (von sagen wir 3 Minuten) nachdem er abgemeldet wird.
So hat man eine relativ eindeutige Onlineliste.

Den Timeout könntest du ungefähr so machen:

PHP:
//Abfragen ob lastaction in der session gesetzt, wenn ja.. ist die lastaction 3Minuten oder länger her .. dann -> user ausloggen. Ansonsten lastaction auf aktuelle Zeit setzen
if(isset($_SESSION['lastaction']) && ($_SESSION['lastaction'] < time() + 60 * 3)) {
    logout($user);
} else {
    $_SESSION['lastaction'] = time();
}

mfg

Devil
 
Nachdem ich diese Idee sehr interessant finde, stellt sich für mich natürlich die Frage, an welche Stelle ein solches Script stehen muß.
Mir ist klar, das es in jeder Seite aufgerufen werden muß, damit zumindest die Lastaction Variable aktuallisisert wird. Aber an welcher Stelle prüfe ich, ob der User noch Online ist? Denn die lastaction hat ja nur der User in seiner Session, der Online ist. Wenn er also den Brauser auf läßt, und nicht mehr klickt, wird auch die Abfrage nicht gestertet. Wenn er wieder klickt, dann aktualisiert sich auch die Variable wieder. Oder habe ich da ein Gedanken Problem?

Für relativ schnelle Hilfe wäre ich Dankbar.
 
Das hast du schon recht, da fehlen globale Daten, da nur der User Zugriff auf die jeweilige Session Variable hat.
Also musst du das Script ein wenig erweitern/ändern und die Daten wie lastaction nicht in der Session, sonder in einer Datenbank speichern.

Ich würde eine Tabelle user_online vorschlagen, die in etwas so aufgebaut ist: session_id, lastaction.
Bei jedem Seiteaufruf eines eingeloggten Users wird jetzt geprüft, ob er schon drinne steht - wenn ja -> UPDATE lastaction, wenn nein -> INSERT.
Gleichzeitig werden aber auch alle Einträge gelöscht, dessen User seit einer bestimmten Zeit keine Aktion mehr gemacht hat, genau wie im Script von Devil Noxx, nur auf alle User bezogen: DELETE FROM ... WHERE lastaction < time() + 60 * 3
 
Danke. Genau den Weg hatte ich eigentlich bis jetzt vor gehabt. Datenbank steht, beim Login werden die daten eingetragen und beim Logoff schon mal gelöscht. Danke für die Hilfe. So werde ichs dann wohl machen.
 
Zurück