phpbar.de logo

Mailinglisten-Archive

RE: [php] Sessionmüll entsorgen - session.gc_maxlifetime

RE: [php] Sessionmüll entsorgen - session.gc_maxlifetime

Dirk Schwarz schwarz at digital-identification.com
Die Aug 30 16:39:22 CEST 2005


php-bounces at phpbar.de <mailto:php-bounces at phpbar.de> wrote:
> Das verstehe ich so, dass Versionen > 4.2.3 die Sessiondateien
> standardmäßig entsorgen. Tatsächlich finde ich aber im bei mir per
> php.ini gesetzten Sessionverzeichnis F:\PHP\sessiondata monatealte
> Dateien, obwohl session.gc_maxlifetime 1440 eingestellt ist. Woran
> könnte das liegen? 

Siehe Comment im INI File
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_dividend,
; e.g. 1/100 means 1%.

session.gc_probability = 1
session.gc_dividend    = 100

d.h. dort wird festgelegt, mit welcher wahrscheinlichkeit die 
alte Sessiondateien gelöscht werden. Diese Einstellung ist
standdardmäßig bei 1%, deshalb sind teilweise alte Dateien da.
Das macht man bei Webservern mit vielen Zugriffen so, um einfach
Performance zu optimieren. In einer Entwickungsumgebung kannst Du
das getrost auf 1/1 setzten oder auf 1/10!

BTW:

http://de2.php.net/session

session.gc_probability integer
session.gc_probability wird in Verbindung mit session.gc_divisor dazu verwendet, die Wahrscheinlichkeit zu regeln, mit der die gc (garbage collection) Routine gestartet wird. Grundeinstellung 1. Siehe auch session.gc_divisor. 

session.gc_divisor integer
session.gc_divisor definiert gekoppelt mit session.gc_probability die Wahrscheinlichkeit, mit der die gc (garbage collection) Routine bei jeder Initialisierung einer Session gestartet wird. Die Wahrscheinlichkeit errechnet sich aus gc_probability/gc_divisor. 1/100 bedeutet z.B., dass die GC-Routine bei jeder Anfrage mit einer Wahrscheinlichkeit von 1% gestartet wird. Grundeinstellung 100. 

 
> Zusatz-Frage (alle Umgebungen):
> In meiner Sessionhandling-Klasse verwende ich folgenden Code:
>         if (defined('SESSPATH')) {
>             ini_set('session.save_path', SESSPATH);         }
>         //Sessionnamen setzen, falls definiert:
>         if (defined('SESSNAME')) {
>              session_name(SESSNAME);
>         }
> Kann ich davon ausgehen, dass PHP in der Standardeinstellung
> auch alte
> Sessiondateien entsorgt, die in dem vom Skript aus definierten
> Verzeichnis liegen? Oder muss ich die alten Dateien dann
> selbst löschen?

Ich gehe mal davon aus, das die Dateien unter dem Umstand 
gelöscht werden, wenn genau dieser Pfad gesetzt istund die
Wahrscheinlichkeitsberechnung einen Löschvorgang anstößt!

Setze einfach die Werte auf 1/1 und probiere es aus ;-)

Grüße

Dirk
+++

php::bar PHP Wiki   -   Listenarchive