Skip to main content

Augmentation de la taille de la table sessions de Joomla!

Mots clés

publié le 6 mars 2018 par
Jean-François Questiaux
Chef de projet
Jean-François Questiaux - Manager Agence Better Web

Peut-être aurez-vous été récemment intrigué par le nombre anormalement élevé de visiteurs connectés à votre site ? Ou, plus grave, avez-vous reçu un message de votre hébergeur - autre que Better Web - vous avertissant le dépassement de la taille limite de votre base de données. Si c'est le cas et si vous savez comment accéder à cette base, vous aurez constaté qu'une table a grossi de façon inhabituelle : la table "sessions". Sur un site très actif, elle peut contenir des milliers ou des dizaines de milliers d'enregistrements !

En principe, ce n'est pas réellement un souci sérieux parce que le type de base de données utilisé par Joomla!® est conçu pour manipuler des millions d'enregistrement. C'est du moins le cas quand il s'agit de serveurs aménagés en ce sens. Dans beaucoup de formules d'hébergement mutualisé, la taille de la base de données est limitée. De plus, souvent, le serveur, ou le site, n'est pas configuré pour gérer un nombre aussi important de données. Cela occasionne alors des ralentissements dans le fonctionnement du site.

Nous avons fait un point sur cette situation.

A quoi servent les sessions Joomla! ?

Quand un visiteur accède au site, il ouvre ce qu'on appelle une session. Celle-ci se voit attribuer un numéro d'identification, enregistré dans une table de la base de données. La session se clôture quand le visiteur quitte le site et son enregistrement est effacé à la fin de la durée fixée pour les sessions dans la configuration générale du site. Par défaut, cette durée est fixée à 15 minutes mais peut-être modifiée par l'administrateur. Cette session est nécessaire au système de gestion des droits d'accès (ACL) de Joomla! afin d'empêcher l'accès au contenu réservé aux membres ou aux administrateurs du site.

Depuis la version 3.8.4, un changement dans la façon dont ces données de sessions sont gérées est intervenu. Pour des raisons d'incompatibilité avec les dernières versions de PHP, il n'est plus possible, dans l'état actuel, d'effacer les données de sessions enregistrées dans la base de données à leur expiration. Celles-ci s'accumulent donc dans la table sessions et donnent à la base des proportions problématiques. Il semble que cette modification fasse partie de la préparation de la version 4 de Joomla!, dont la publication est prévue au 4e trimestre 2018, et ne sera pas corrigée dans les futures versions 3.

Comment arrêter la croissance de la table sessions de Joomla! ?

La manipulation se déroule en deux étapes.

Première étape

Méthodes de gestion des sessions dans Joomla!Dans la configuration générale de Joomla! (Système > Configuration), dans l'onglet Système, il suffit de choisir PHP comme méthode, au lieu de Base de données.

Attention : suivant la configuration de votre serveur, vous pouvez avoir d'autres options que PHP, comme, par exemple, Mémoire cache ou Cache PHP alternatif.  Nos essais montrent qu'il faut éviter d'utiliser ces options car cela bloque le site. Vérifiez donc d'avoir choisi PHP avant de sauvegarder la configuration.

Remarque : après avoir sauvegardé cette nouvelle configuration, vous allez être déconnectés du site. Ne vous inquiétez pas, c'est tout-à-fait normal. Vous pourrez vous reconnecter sans difficulté.

Deuxième étape

Le changement de méthode de gestion des sessions ne vas pas purger la table sessions des données expirées. Vous allez devoir le faire manuellement.

Si vous avez l'habitude de travailler directement dans les bases de données, par exemple avec un logiciel comme phpMyAdmin, vous pouvez vider (vider, pas effacer !) la table. Attention cependant aux fausses manoeuvres : se tromper de ligne ou effacer la table au lieu de la vider ne produira pas les effets escomptés !

Une manière plus sûre est d'utiliser une extension comme Admin Tools. Si vous êtes sérieux dans la protection de votre site, vous avez peut-être déjà installé la version Pro de ce composant de sécurité, comme nous le faisons pour tous nos clients ayant souscrits à notre offre d'hébergement, mais si ce n'est pas le cas, la version gratuite possède la fonction dont nous avons besoin ici : Purge Sessions. Cliquez sur cette icône pour vider la table sessions. Vous recevrez un avertissement vous indiquant que cela vous déconnectera du site. Vous pouvez valider cette annonce et l'ignorer car, maintenant que les sessions sont gérées par PHP, vous resterez connectés.

Interface de Admin Tools Core

Tant que vous êtes sur cette page, cliquez ensuite sur Repair & Optimize Tables pour "nettoyer" la base de données et corriger d'éventuelles erreurs.

Le problème est-il résolu ?

Dans la plupart des cas, oui. Cependant, il peut subsister un souci. Maintenant que la base de données est sous contrôle (la table sessions continuera à se remplir néanmoins, mais elle ne grandira plus sans limite), il faut encore effacer les sessions expirées. Celles-ci sont maintenant sauvegardées sous forme de petits fichiers dans le dossier /tmp défini dans la configuration de PHP du serveur. Remarque : ce fichier n'est pas le même que le dossier /tmp présent à la racine du site mais un autre fichier placé plus haut dans la hiérarchie des dossiers sur le serveur.

Le processus informatique de nettoyage de ce dossier s'appelle le "ramassage des ordures" (Garbage Collection en anglais). Comme dans le monde réel, ce "ramassage" dépend de l'endroit où l'on se trouve. Sur un serveur, la fréquence du Garbage Collection dépend de deux directives : session.gc_probability et session.gc_divisor. Vous trouverez la valeur de ces directives, pour votre site, en allant dans Système > Informations système > Informations PHP. Vers le bas de la page, consultez la section session. Les valeurs courantes sont 1 pour gc_probability et 1000 pour gc_divisor. Cela veut dire que le nettoyage se passe une fois sur mille. Sur nos serveurs, nous avons fait passer le gc_probability à 10 pour augmenter la fréquence et limiter le nombre de fichiers.

L'inconvénient de ce dispositif est que, sur certains hébergements mutualisés, la valeur de gc_probability est fixée à 0, ce qui veut dire que l'effacement ne se produit jamais ! L'espace de stockage alloué pour les fichiers étant de nos jours assez généreux, l'augmentation de la taille du dossier /tmp ne devrait pas avoir trop de conséquences. Toutefois, certains hébergeurs fixent aussi une limite au nombre de fichiers présents sur le serveur, donc il est possible qu'à un certain moment cette limite soit atteinte et l'espace de stockage saturé.

Pour éviter cette situation, plusieurs possibilités existent

  • Contacter l'hébergeur et lui demander de modifier la directive gc_probality
  • Si l'on a accès au fichier /tmp, purger régulièrement les fichiers les plus anciens
  • Conserver la méthode Base de données pour la gestion des sessions et purger régulièrement les sessions. Si vous utilisez la version Pro d'Admin Tools, vous pouvez automatiser cette tâche via le plugin System - Admin Tools. En fonction de la fréquentation de votre site, choisissez une fréquence de 1 jour (1440 minutes), 1 semaine (10080 minutes), ... Attention : cette méthode ne convient pas aux sites ayant des membres enregistrés car ceux-ci seront "éjectés" du site à chaque purge des sessions. 

Plugin système Admin Tools Pro

Envie de réagir ?

Laissez-nous vos commentaires ou questions sur la Page Facebook de Better Web.

Pour recevoir automatiquement nos nouveaux articles, abonnez-vous à notre lettre d'information.

Ressources externes