Mailinglisten-Archive |
Hi Alexander, > > Nochmal - habe leider noch keine Antwort bekommen - kann mir eine > helfen? > > Hmmmm - kommen meine Mails nur nicht in der Liste an oder kann/will > mir keiner Helfen? :-( Niels hatte Dir darauf ja schon geantwortet, moeglicherweise hast Du dich etwas missverstaendlich ausgedrueckt. Was willst Du erreichen und was funktioniert nicht, was Du probiert hast? Meine Interpretation von Deiner Mail: Wie kann ich erreichen, dass veraltete Sessiondaten auf dem Server nach irgendeiner Regel geloescht werden? Das soll unabhaengig davon funktionieren, ob sich Leute ausloggen oder nicht? Du hast versucht, das ueber session.gc_maxlifetime und session.gc_probability, wie beschrieben, zu erreichen und das hat nicht geklappt. Anhand der Antwort von Niels kann man sehen, dass die Interpretation auch anders ausfallen kann ;-) > ---------- > > Ich verstehe das nicht... ich habe eine Seite mit Userlogin. > Geht auch alles super... das Problem: > > ich habe den Parameter: > > session.gc_maxlifetime > > eigentlich so verstanden das nach der maxlifetime eine Session > (sollte sie nicht mehr erneuert werden) gelöscht wird.... der > Standart ist 1440 also 24 Min.?! Konkreter: Falls ein GC-Lauf stattfindet, werden Sessiondaten die session.gc_maxlifetime uebserschritten haben, geloescht. Wenn nur alle 14 Tage ein GC-Lauf stattfindet, liegen haufenweise Sessiondaten auf dem Server, die uralt sind. Die Wahrscheinlichkeit, dass _beim Starten_ einer Session ein GC-Lauf stattfindet, berechnet sich nach: session.gc_probability/session.gc_divisor gibt irgendeine Prozentzahl z.B. 1/100. Aber das weisst Du ja ;-) > > Wenn sich aber nun jemand nicht abmeldet bleiben die Session-Dateien > > >24h und noch länger da - Siehe oben... > >obwohl ich sogar bei einem LOGOUT den Wert > > für session.gc_probability auf 100/100 setzte so das bei JEDEM LOGOFF > von irgendejemanden ein GC-lauf sein sollte... > > Wo ist der Fehler? Genau hier: _Am Skriptende_ beim logoff setzt Du mit ini_set die session.gc_probability auf 100/100, das hat aber nur Auswirkungen in Deinem aktuellen Skript. Ist dein Skript zu Ende, gelten wieder die globalen Einstellungen aus php.ini, httpd.conf oder .htaccess, die wahrscheinlich auf 1/100 stehen. Startet die naechste Session, gelten diese globlen Einstellungen, dein ini_set aus einem abgelaufenem Skript interessieren nicht. Langer Rede kurzer Sinn: Wenn Du die Wahrscheinlichkeit erhoehen willst, dass ein GC-Lauf startet, musst Du in Deinem Skript session.gc_probability vor session_start setzen. Wenn Du alle Sessiondaten verarbeitet hast, die Session und die Sessiondaten nicht mehr brauchst, kannst Du mit $_SESSION = array(); das Sessionarray von allen Variablen und Werten befreien und anschliessend mit session_destroy die zugehoerigen Sessiondaten auf dem Server loeschen. Bietet sich bei einem kontrollierten Logout-Vorgang an und wuerde ich auch so empfehlen, dann liegen keine uralt Sessiondaten auf dem Server rum. Ein Problem hast Du nur, wenn sich jemand nicht aussloggt und der oben beschriebene Mechanismus nicht greift. Aus Performancegruenden ist es empfehlenswert, ganz auf die GC-Routinen von PHP zu verzichten und verbliebene veraltetete Sessiondaten andersweitig loszuwerden (z.B. cronjob). Das verhindert den Overhead, dass bei jedem Skript, das eine Session startet der ganze GC-Mechanismus angeworfen wird. Ein letzter Tipp: Falls Du auf einem shared Hosting Server bist, wuerde ich Dir empfehlen, den session.save_path in ein eigenes temp Verzeichnis zu legen (im Gegensatz zu einem serverweiten /tmp Verzeichnis). Dann hast Du bessere Kontrolle ueber _deine_ Sessiondaten (und sicherer ist es auch) ;-) Genug gelabbert, Gruesse Friedhelm -- http://www.jungle-world.com/
php::bar PHP Wiki - Listenarchive