Session-heini: Am SESSION Ende etwas ausführen

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!!!

  1. 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.

    1. Hello,

      Gibt es eine Möglichkeit, bei einem erzwungenen  SESSION-Ende noch etwas auszuführen???

      Hier muss man mehrere Dinge unterscheiden:

      • Die Session
      • Die Lebensdauer der Sessiondatei
      • Die Laufzeit des Scriptes

      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

      --
      Nur selber lernen macht schlau
  2. 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!