Am SESSION Ende etwas ausführen
Session-heini
- php
Hallo,
ich schreibe zu Beginn einer SESSION etwas ins Shared Memory (zum Austausch mit anderen SESSIONS etc.). Wenn ich die SESSION explizit beende kann ich das Shared Mem. natürlich selbst zurückstzen. Wenn die SESSION aber vom Server gekillt wird, bleibt das Shared Memory belegt.
Gibt es eine Möglichkeit, bei einem erzwungenen SESSION Ende noch etwas auszuführen???
Danke für Antwort!!!
Gibt es eine Möglichkeit, bei einem erzwungenen SESSION-Ende noch etwas auszuführen???
Indem du mittels session_set_save_handler() eigene Behandlungsroutinen festlegst, dazu gehört auch, anders als der Name vermuten lässt, eine Routine zum Löschen. Soweit ich das überblicke, wird aber auch diese nicht beim tatsächlichen Lebensende aufgerufen, sondern sobald PHP meint, es wäre wieder einmal an der Zeit (wann das ist, kannst du aber mit session.gc_probability und .gc_divisor festlegen) und frühestens, sobald wieder ein Skript läuft. Beachte auch, dass die serverseitige Lebensdauer nicht mit session.cookie_lifetime festgelegt wird, sondern mit session.gc_maxlifetime.
Hello,
Gibt es eine Möglichkeit, bei einem erzwungenen SESSION-Ende noch etwas auszuführen???
Hier muss man mehrere Dinge unterscheiden:
Die Lebensdauer der Sessindatei sollte selbstverständlich immer mindestens so lang sein, wie die Session. Sie hat aber mit der Gültigkeit der Session nichts zu tun. Die Gpltigkeit der Session kann man in einer separaten Funktion z.B. in der Datenbank verwalten.
Da es bei Sessions immer um Zeiträume von mehreren Minuten und nicht um Millisekunden handelt, würde ich den Speicher auch an den GC koppeln. Bei PHP auf Debian 4.0 ist das recht einfach, denn dort wird der GC mit einem Cronjob bedient. man muss sich also nur mit einem Script in diesen Cronjob einklinken. Ich würde eine separate Tabelle führen, in der der shared memory unter der Sessionnummer eingetragen ist. Du musst Du ja sowieso irgendwo die SystemID für den Block merken...
Wenn dann der GC-Job läuft, kann er feststellen, zu welchem Eintrag keine Sessiondatei mehr vorhanden ist und ihn wieder freigeben.
Wenn Du mit dem PHP-eigenen GC arbeitest, weiß ich leider (noch) nicht, wo amn erlaubterweise eingreifen könnte.
http://de2.php.net/manual/en/function.shmop-open.php
Lies dir aich http://de2.php.net/manual/en/ref.session.php nochmal durch.
Speziell den Hinweis über http://www.ossp.org/pkg/lib/mm/
Liebe Grüße
Tom vom Berg
Vielen Dank für die beiden Antworten,
hoert sich beides sehr vielversprechend an!!! Aber ich muss jetzt
natürlich erst mal ein bischen spielen um es zu verstehen. Ohne
euch wäre ich jedenfalls ein bischen dümmer ...
Danke!