Session mittels Session_ID beenden
palo_one
- php
Schönen guten Abend,
ich habe folgendes Problem und bekomme einfach keine Lösung hin. Evtl. sehe ich auch den Wald vor lauter Bäumen nicht mehr.
Meine Problematik:
Ich programmieren gerade einen WebSite in der man sich einloggen kann und nach erfolgreichem Login bekommt jeder Anwender eine entsprechende Session in der auch wichtige Daten wie "account_id" usw. .. gespeichert werden.
Das Einloggen funktioniert prima. Ebenso das Ausloggen mittels session_destroy();.
Nun möchte ich einen Anwender nach ca. 1Stunden ausloggen (seine SESSION beenden) sobald er keine Aktivitäten mehr auf der Seite gemacht hat. Dazu speichere ich die Session_ID und die letzte Aktualisierung (refresh der Seite oder neuer Seitenaufruf) in eine DB. Nach einer Stunde löscht er mir auch diese Datensätze. Aber die Session bleibt immernoch bestehen.
Ich will die Session auch nicht grundsätzlich nach einer bestimmten Zeit löschen (ini set_time .. oder so), sondern halt nur, wenn der Benutzer keine Aktivitäten mehr auf der Seite macht.
Kann ich irgendwie die Session löschen mit session_destroy($sess_id)?
Ich muss eine Sitzung mittels der Session_ID beenden können.
Gibt es dort eine Möglichkeit.
Bitte helft mir. Vielen Dank.
Hi,
Nun möchte ich einen Anwender nach ca. 1Stunden ausloggen (seine SESSION beenden) sobald er keine Aktivitäten mehr auf der Seite gemacht hat. Dazu speichere ich die Session_ID und die letzte Aktualisierung (refresh der Seite oder neuer Seitenaufruf) in eine DB. Nach einer Stunde löscht er mir auch diese Datensätze. Aber die Session bleibt immernoch bestehen.
Natürlich, weil zwischen den Einträgen in deiner DB und den Session-Dateien ja auch keine Verbindung besteht.
Auf das Speichern in der DB kannst du ganz verzichten - speichere in der Session den Timestamp der letzten Aktion (also *jeder* Aktion), und prüfe beim nächsten Zugriff dann, ob dieser noch nicht mehr als eine Stunde in der Vergangenheit liegt.
Kann ich irgendwie die Session löschen mit session_destroy($sess_id)?
Nein.
Ich muss eine Sitzung mittels der Session_ID beenden können.
Musst du nicht, s.o.
Man könnte zwar im Verzeichnis, in dem die Session-Daten gespeichert werden, manuell herumpfuschen und eine Datei löschen - aber das ist nicht empfehlenswert.
MfG ChrisB
Vielen Dank für deine Antowrt ChrisB.
Auf das Speichern in der DB kannst du ganz verzichten - speichere in der Session den Timestamp der letzten Aktion (also *jeder* Aktion), und prüfe beim nächsten Zugriff dann, ob dieser noch nicht mehr als eine Stunde in der Vergangenheit liegt.
Werde ich gleich mal ausprobieren.
Ich gebe dir aufjedenfall Feedback, ob es funktioniert oder nicht.
Prima,
so wie du es beschrieben hast, hat es funktioniert.
Vielen lieben Dank und ein schönes Wochendende!
Hallo,
Auf das Speichern in der DB kannst du ganz verzichten - speichere in der Session den Timestamp der letzten Aktion (also *jeder* Aktion), und prüfe beim nächsten Zugriff dann, ob dieser noch nicht mehr als eine Stunde in der Vergangenheit liegt.
Dann kann man aber nur die Sessions löschen, auf die nach 1h noch einmal zugegriffen wird, alle anderen bleiben als Leichen erhalten...
vg ichbinich
Hi,
Dann kann man aber nur die Sessions löschen, auf die nach 1h noch einmal zugegriffen wird, alle anderen bleiben als Leichen erhalten...
Nein, um die kümmert sich der Garbage Collector.
MfG ChrisB
Hello,
Auf das Speichern in der DB kannst du ganz verzichten - speichere in der Session den Timestamp der letzten Aktion (also *jeder* Aktion), und prüfe beim nächsten Zugriff dann, ob dieser noch nicht mehr als eine Stunde in der Vergangenheit liegt.
Dann kann man aber nur die Sessions löschen, auf die nach 1h noch einmal zugegriffen wird, alle anderen bleiben als Leichen erhalten...
Genau, man kann von außen gar keine Sessions löschen, die regelmäßig bedeint werden. Es verfallen nur diejenigen nach der eingestanzten Zeit, die dann auch benutzt werden. Alle anderen verfallen erst, wenn der Aufräumprozess (zufällig) mal daran denkt, die Session-Dateien aufzuräumen.
Darum sollte man in vernünftig designten Systemen die Trägerschicht der Session immer von der logischen trennen. Der Aufräumprozess muss die Session-Dateien (das ist die Trägerschicht) auf jeden Fall solange in Ruhe lassen, wie die maximale Pausendauer in der logischen Schicht eingestellt ist.
Dann kann man in der logischen Schicht bequem entscheiden, wie lange eine Session maximal dauern darf, wie lange die Pausen sein dürfen, ob sie durch den Admin oder entsprechende Prozesse gezielt geschlossen werden soll. Und m,an kann die berühmte Frage "Wer ist online?" auch relativ einfach lösen (Für die Pedanten also genauer: wer hat innerhalb der letzten x Sekunden als angemeldeter Cleint einen Request abgesetzt?).
Man kann dann sehr viel einfacher auch die Rechte per Request regeln.
Es ist daher überhaupt nicht falsch, die Session-ID in der DB zu vermerken.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg