debian php : suppression des fichiers de session (garbage collector)

WRInaute discret
Bonsoir,

Je trouve que les explications du fichier de conf de php ne sont pas très claires concernant le garbage collector. Si quelqu'un pouvait m'expliquer ça serait cool.

Je suis sous debian et j'utilise un session.save_path personalisé (sur un ramdisk). Voilà le bout de mon php.ini intéressant concernant les sessions :

Code:
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

; This is disabled in the Debian packages, due to the strict permissions
; on /var/lib/php5.  Instead of setting this here, see the cronjob at
; /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below.
; php scripts using their own session.save_path should make sure garbage
; collection is enabled by setting session.gc_probability
session.gc_probability = 1
session.gc_divisor     = 1000

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage
;       collection through a shell script, cron entry, or some other method.
;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm

J'avais un problème de fichiers de session qui n'étaient pas supprimés (au passage, c'est plutôt vicieux de pas activer le GC par défaut...). J'ai donc décommenté la ligne "session.gc_probability = 1" et tout est rentré dans l'ordre. Par contre je ne comprends rien aux commentaires. Je crois comprendre que "session.gc_probability = 1" est commenté par défaut sous debian à causes des droits sur /var/lib/php5 qui empêchent le GC de fonctionner. Or lorsque j'ai décommenté cette ligne, mes fichiers session sont bien supprimés par le garbage collector. Alors je me dis que ça marche quand même parce que les fichiers session sont stockés dans un répertoire avec des droits souples, du coup la restriction lié à debian ne s'applique pas. Jusque là ok.
Mais je vois dans la note que si on utilise un répertoire différent de /var/lib/php5 pour stocker les sessions le GC ne doit pas marcher, alors qu'ils conseillent 10 lignes au dessus d'activer le GC si on utilise un rep personnalisé !! Ils disent des conneries dans la note ou c'est moi qui comprends rien ?

Je suis aussi allé voir du coté de /etc/cron.d/php5 qui dit :

Code:
# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm

J'ai vérifié dans le syslog, cette tache s'exécute bien. Mais elle ne sert à rien puisque d'une part le GC fait bien son travail et d'autre part elle vide le rep "/var/lib/php5" qui ne contient aucun fichier de session dans ma config...

Est-ce que je me trompe ?
 
WRInaute passionné
Je n'ai pas l'impression que tu te trompes, toutefois le cron est prévu pour une conf "par défaut", donc si tu stocks tes sessions ailleurs que /var/lib/php5, il faut éditer le fichier /etc/cron.d/php5.
Ils ne disent pas de conneries dans la note, c'est juste que c'est sensé être mal nettoyé vu que Debian aime bien sa configuration par défaut.

J'ignore les perms que tu as sur ton dossier "de session", où elles sont stockés, mais par défaut, il me semble que ça fonctionne bien.

Perso je stock mes sessions dans memcache donc je ne pourrais pas trop t'en dire plus.
 
WRInaute discret
Ok, on va dire que le garbage collector ne fonctionne pas sur les répertoires avec des droits trop restrictifs, mais que à partir du moment ou on met des droits plus ouvert (j'avais mis 777) ça fonctionne, répertoire personnalisé ou pas. (quand même, la note sous-entend fortement que le gc ne marchera pas sur un rep perso quelque soient les droits, ce qui est apparemment faux).
Du coup j'ai commenté la ligne cron, ça fait un syslog un peu plus propre et mes fichiers sont bien supprimés automatiquement par php.

Merci pour ta réponse !
 
Discussions similaires
Haut