Auf Session Timeout reagieren bzw. Session Funktionen, Onlinestatus etc.

SonMiko

Erfahrenes Mitglied
Hallo zusammen,

ich suche verzweifelt nach einer Möglichkeit ein script aufzurufen bzw. zu interagieren wenn
die Session eines Users abläuft.

Warum? - Nun ich habe auf meiner Seite eine art Onlineindikator eingebaut.
Loggt man sich ein, wird man als online aufgeführt (wenn man möchte).
Loggt man sich aus, wird auch ein Script ausgeführt um den Status wieder auf offline zu setzen.

Leider loggen sich ja bekanntlich viele User nicht aus, diese bleiben dann als online markiert.
Was kann man in einem solchen Fall tun?

Könnte man eventuell irgendwie auf die Session reagieren wenn sie abläuft?

Was gibt es generell für Funktionen um beispielsweise alle aktiven Sessions des Servers einzusehen (gibts sowas überhaupt?),
gezielt zu schließen etc. (Session Destroy bezieht sich ja auf die eigene Session...)...

Ich wäre froh für alle erdenklichen Tips...

Besten Dank und freundliche Grüße,

Mike
 
Ad hoc fallen mir da vier Möglichkeiten ein:

  • du prüfst mit AJAX in bestimmten Abständen den Sitzungsstatus der angemeldeten Nutzer. Falls dieser überfällig sein sollte, schickst du an seine aktuelle Seite einen Befehl zum Abmelden.
  • du prüfst in bestimmten Abständen die Stati aller Nutzer die als angemeldet angezeigt werden (mit CronJobs). Falls Nutzer mit überfälliger Session dabei sind, sollen sie abgemeldet werden.
  • du baust das zuletzt genannte in jede Seite ein und somit wird bei jedem Seitenaufruf überprüft, ob noch überfällige Sessions offen sind.
  • du setzt einfach einen Zeitstempel für die letzte Aktivität. Falls diese überfällig ist, wird als Anmeldungsstatus "offline" (oder was du da gerne hättest) angezeigt.
 
Hi,

danke für die vielen Ideen-Ansätze - ein Paar davon könnte ich mit Sicherheit nutzen.
Trotzdem hatte ich eigentlich auf Session-Funktionen gehofft die einem generell das Leben etwas
erleichtern - das PHP Manual lieferte allerdings in der Befehlsreferenz auch keine brauchbaren Funktionen
weswegen ich es dann wohl mit ständigem Überprüfen oder ständigem Status setzen lösen muss.

Besten Gruß,

Mike
 
Der Punkt ist, dass PHP eine serverseitige Programmiersprache ist, welche bei jedem Aufruf die Inhalte kompiliert und vollständig an den Browser sendet. Das bedeutet allerdings auch, dass diese Seite keine Ereignisse verarbeiten kann nach dem sie einmal gesendet wurde. Erst ein erneuter Aufruf der Seite ermöglicht Änderungen. Deswegen muss man die Seite entweder regelmäßig aufrufen oder mit einer anderen clientseitigen Sprache (wie JavaScript) auf Ereignisse abfangen und dann diese an eine andere PHP-Datei weiterleiten.
 
Moin,

Was gibt es generell für Funktionen um beispielsweise alle aktiven Sessions des Servers einzusehen (gibts sowas überhaupt?),
gezielt zu schließen etc. (Session Destroy bezieht sich ja auf die eigene Session...)...

Jo, das ist recht wirr :-)

Sessions gibts ja im Browser, und nicht auf dem Server(zumindest in dem Zusammenhang).

Um die "aktiven Sessions des Servers" ....wenn man es so nennen will, einzusehen, wäre Voraussetzung, dass du bei jedem Zugriff eine Session-Variable aktualisierst, nur dann erfolgt auf dem Server ein Schreibzugriff(ob nun in DB oder Datei hängt davon ab, wie du die Sessions verwaltest).

Das wäre dann der Ansatz, wo du nachhaken kannst.
Wird eine Datei geschrieben(für jede Session wird ja bspw. eine eigene Datei im session_save_path gespeichert) kannst du ...deren Änderungsdatum ermitteln und danach filtern, wer noch "aktiv" ist(vorausgesetzt, du speicherst auch etwas in der Session, woran du erkennst, wer wer ist)

Eine Variante ohne JS:
Baue ein verstecktes IFRame in die Seite, welches sich in Abständen per META-Refresh aktualisert und so die Session aufrecht erhält, wenn man mal etwas länger auf derselben Seite verweilt.
 
Zurück