Ralph: Server Side Cookie //Session Garbage Collector

Beitrag lesen

Hallo,

Ich suche eine gute, bessere Möglichkeit zum löschen
einer "gestorbenen" abgelaufenen Session.

Ich kenne Folgende Möglichkeiten (mit Nachteilen.)

Garbage Collection via GC-Probability. bei Skriptaufruf

(es wird manchmal eine Zustzfunktion gestartet dann wird die
Session bereinigt)

  • Interne php Session Management GarbageCollector
         -Datenbank Probleme
  • Eigener Garbage Collector ähnlich wie interner
         -DB Ok jedoch overhead...es trifft sicher denjenigen der
          eh schon lange warten muss!

Realtime GC

(Nach beenden der Session wird session gelöscht)

  • Javascript onunload ¨
         - JS ausgeschaltet ist der GC TOT!
         - funxt prima in IE und NS jedoch nur wenn man ein
           popup öffnet(ich hasse pops)
         - mit forms.submit()
             - IE
                 -Fenster schliessen => OK
                 -ander Url eingeben => OK
                 -von Bookmarks      => OK
             - NS
                 -Fenster schliessen => NEIN!!!
                 -ander Url eingeben => OK
                 -von Bookmarks      => Manchmal fehlerhaft!

  • netstat Methode(http://www.php.net/manual/de/function.connection-status.php)
       $myShellString =
       "netstat -n -a | grep $REMOTE_ADDR:$REMOTE_PORT |wc -l";
       $myStatus =  shell_exec($myShellString);
       do {
       YOURCODE
       } while ( (int)$myStatus > 0);

- Connection bleibt immer am laden?

  • andere RealTime GC's?

Garbage Collection mit Zeitabgleich

(Server(skript, cron) und Client(cookie) erhalten ein expiration
Zeitabgleich)

  • Cron Methode ein phpskript wird in Cron eingetragen oder
      in phpcron (http://phpcron.sourceforge.net)
           - Unix Cron meist kein Zugriff auf Servern
           - phpcron => overhead

  • SSC Server Side Cookie..habe folgendes Skript gefunden
            //Timeout 1440 = 24 min
     srand((double)microtime()*1000000);
     $id = md5(rand(0,9999999));
     print $id;
     $code = "<?php sleep(1440);$fp = fopen("session.log",
                     "a");fwrite($fp, "Session $id deleted\n");
                     fclose($fp);/*  DATABASEUPDATE GOES HERE*/
                     unlink("$id.php");?>";

$fp = fopen("./tmp/$id.php", "a");
 fwrite($fp, $code);
 fclose($fp);
 exec("php ./tmp/$id.php");

- Der Overhead ist jedoch so gross, dass bei 4 Clients
         mein Testserver die Kurve kratzt.

-SSC 2 Finde das Scriptstück LEIDER nicht mehr aber das Prinzip war
       so: EIN! Skript macht den gleichen Job wie bei SSC 1
       also irgendwie expiration.php?SessionID
       d.h Alle Sesssion, Exp Daten sind nach exp gesortet in einem
       Array es hat eine Timeout-funktion welche immer das erste
       Exp-Date runterzählt und aktualisiert immer die Daten...also
       eigentlich ein einfacher timout-Cron...wenn er nix zu tun
       hat  läuft er einfach nicht. php-cron liest ja jede minute
       ein Config file ein.

-Overhead und naja finde die Source nicht mehr, mein
        Nachbild nach obrigem Prinzip ist leider stinklangsam
        also Servercrash hoch 10!

Also wer hat andere Lösungsansätze, ganz andere oder einfachere
bessere?

Ich hirne weiter...wenn mir noch was einfällt lass ichs wissen

Ralph
Inf.ethz