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