Nettoyage des sessions dans eZ Publish (bug #10431)

J'ai remarqué que sur plusieurs sites que la table ezsession chargée de stocker les données de session dans eZ Publish n'est jamais nettoyée, les données de session expirée s'accumulent. Selon la fréquentation du site, on obtient à plus ou moins long terme une table avec des millions d'enregistrements ce qui provoque au choix des ralentissements, des vérifications (mysqlcheck ) interminables, des problèmes pour faire les backups (mysqldump de plusieurs gigas) voire carrément une corruption de la base de données. J'ai d'ailleurs rapporté ce bug il y a quelques temps en proposant un script de 8 lignes (dont 4 inutiles...:-) à lancer via le système de cronjobs d'eZ Publish . Je ne suis visiblement pas le seul à avoir rencontré ce problème. Dans un fil du forum sur le même sujet , Xavier Dutoit propose d'utiliser le script update/common/scripts/cleanup.php pour supprimer les sessions expirées. Markus Bader a créé l'extension Session Cleanup pour régler ce problème.

Mais quel est la vraie origine de ce problème ? Richard Bayet apporte la lumière sur ce problème en citant un commentaire de la documentation PHP officiel sur une spécificité de Debian . Pour résumer, eZ Publish intègre son propre gestionnaire de session pour stocker les données en base plutôt que dans des fichiers. Or, sous Debian et dérivés, le nettoyage (Garbage collector) des anciennes sessions est assurées par un script shell lancé régulièrement par cron plutôt que par la fonction gc définit avec session_set_save_handler pour plus de sécurité dans l'utilisation du gestionnaire par défaut qui travaille avec des fichiers. Évidemment ce script est incapable de supprimer les sessions en base... Le lancement d'un script spécifique de manière asynchrone est donc nécessaire pour Debian et dérivés. Tout s'explique donc.

» Commentaires

- ezPublish, pas la seule victime... (#65386) par Benoit Jacquemont le 10 Mai 2007 à 01:15
Bien vu Damien !

Et effectivement, on trouve des infos à ce sujet par exemple pour Drupal:
http://drupal.org/node/35834

Il suffirait donc de modifier le paramètre session.gc_probability (le mettre 1 par exemple) dans le php.ini pour que le GC des sessions soit réactivé.

Dans ce cas, je suppose que le GC fait appel au session handler de ezPublish pour nettoyer les sessions, non ?

En tout cas, ce qui est sur, c'est que la restriction de sécurité appliquée par Debian ne concernant que des sessions en fichiers, celle-ci n'a pas de sens pour un site ezPublish. Le passage du paramètre à 1 ne devrait donc pas poser de problème de sécurité sur un site ezPublish sous Debian.

Bref, reste à tester ce paramètre et si celui-ci fonctionne, plus besoins de scripts ou d'extension particulière !

Cool, non ;)
- tu as raison ! (#65387) par Damien le 10 Mai 2007 à 01:15
Je viens de tester rapidement en mettant session.gc_probability à 1 et session.gc_divisor à 1 et effectivement la fonction eZSessionGarbageCollector qui fait le ménage est appelé (à tous les coups) ! Voila donc le mystère des sessions qui s'empilent à l'infini résolu !

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login