web-dev-qa-db-fra.com

Pourquoi Debian nettoie-t-elle les sessions php avec un travail cron au lieu d'utiliser le récupérateur de place intégré de php?

Debian et dérivés (Ubuntu) n'utilisent pas le ramasse-miettes de session php

session.gc_probability = 0

à la place, ils utilisent un cron /etc/cron.d/php5

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete

Pourquoi Debian a choisi de faire cela?

28
nulll

Parce que Debian définit des autorisations très strictes sur /var/lib/php5 (1733, racine du propriétaire, racine du groupe) pour empêcher PHP détournement de session. Malheureusement, cela empêche également le collecteur d'ordures de session natif PHP session) de fonctionner, car il ne peut pas y voir les fichiers de session. Le travail cron s'exécute en tant que root, qui dispose d'un accès suffisant pour voir et nettoyer les fichiers de session.

Edit : Documentation de support: Le comportement a été établi en réponse à bug # 26772 . (Il y avait des commentaires dans le stock php.ini fichier à ce sujet, mais je ne les vois pas maintenant dans mon installation basée sur wheezy PHP install.)

32
asciiphil

Il est susceptible d'être un peu plus fiable sur les sites à faible trafic (si vous n'obtenez que quelques centaines de visites par jour et que le GC ne se déclenche que tous les mille environ, les sessions peuvent rester bien plus longtemps qu'elles ne le devraient) et j'imagine que cela pourrait être un un peu moins dur sur le serveur que le GC natif si vous avez beaucoup de sessions.

5
ceejayoz