78 votes

nettoyage des fichiers de session php

Sur mon site Web, j'utilise des sessions PHP. Les informations de session sont stockées dans des fichiers situés dans le chemin ./session. Après quelques mois, j'ai découvert que ces fichiers de session ne sont jamais supprimés. Il y en a maintenant 145 000 dans ce répertoire.

Comment les nettoyer ? Dois-je le faire par programme ou existe-t-il un paramètre que je peux utiliser quelque part pour que ce nettoyage se fasse automatiquement ?

EDIT J'ai oublié de mentionner : Ce site fonctionne chez un fournisseur, donc je n'ai pas accès à une ligne de commande. J'ai un accès ftp, mais les fichiers de session appartiennent à un autre utilisateur (celui du serveur web, je suppose). D'après les premières réponses que j'ai obtenues, je pense que ce n'est pas seulement un paramètre du serveur ou de PHP, donc je suppose que je vais devoir implémenter quelque chose pour cela en PHP, et l'appeler périodiquement depuis un navigateur (peut-être depuis une tâche cron exécutée sur ma propre machine à la maison).

66voto

Seb Points 17238

Pour gérer correctement la session, jetez un coup d'œil à http://ar.php.net/manual/en/session.configuration.php .

Vous y trouverez ces variables :

  • session.gc_probabilité
  • session.gc_divisor
  • session.gc_maxlifetime

Ils contrôlent la probabilité d'exécution du ramasseur d'ordures (GC) à chaque demande de page.

Vous pouvez les définir avec ini_set() au début de votre script ou de votre fichier .htaccess afin que vous soyez certain que, dans une certaine mesure, ils seront supprimés un jour.

38voto

Paul Dixon Points 122033

Debian/Ubuntu gère cela avec un cronjob défini dans /etc/cron.d/php5

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

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

Le script maxlifetime renvoie simplement le nombre de minutes pendant lesquelles une session devrait être maintenue en vie en vérifiant le php.ini, cela ressemble à ceci

#!/bin/sh -e

max=1440

for ini in /etc/php5/*/php.ini; do
        cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
        [ -z "$cur" ] && cur=0
        [ "$cur" -gt "$max" ] && max=$cur
done

echo $(($max/60))

exit 0

37voto

Andi Points 53

Au cas où quelqu'un voudrait faire cela avec un cronjob, veuillez garder à l'esprit que ceci :

find .session/ -atime +7  -exec rm {} \;

est vraiment lent, lorsqu'il y a beaucoup de fichiers.

Envisagez d'utiliser ceci à la place :

find .session/ -atime +7 | xargs -r rm

Si vous avez des espaces dans vos noms de fichiers, utilisez ceci :

find .session/ -atime +7 -print0 | xargs -0 -r rm

xargs remplira la ligne de commande avec les fichiers à supprimer et exécutera la commande "rm" beaucoup moins souvent que "-exec rm {}\ ;", qui appelle la commande "rm" pour chaque fichier.

Juste mes deux cents

6voto

vartec Points 53382

Utilisez cron avec find pour supprimer les fichiers plus anciens que le seuil donné. Par exemple, pour supprimer les fichiers qui n'ont pas été consultés depuis au moins une semaine.

find .session/ -atime +7  -exec rm {} \;

5voto

Daniel Milde Points 85

Vous pouvez créer script /etc/cron.hourly/php et y mettre :

#!/bin/bash

max=24
tmpdir=/tmp

nice find ${tmpdir} -type f -name 'sess_*' -mmin +${max} -delete

Ensuite, rendez le script exécutable (chmod +x).

Désormais, toutes les heures, tous les fichiers de session dont les données ont été modifiées il y a plus de 24 minutes seront supprimés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X