En PHP, lorsqu'aucune variable ne pointe vers cet objet, l'objet devient un déchet. PHP le détruira en mémoire ; il s'agit du mécanisme d'élimination des déchets GC de PHP pour empêcher le débordement de mémoire.
Le travail de GC consiste à analyser toutes les informations Session
, à soustraire la dernière heure modifiée de session
de l'heure actuelle et à la comparer avec le paramètre session.gc_maxlifetime
si le temps de survie dépasse gc_maxlifetime
(. par défaut 24 minutes), supprimez la session.
Lorsqu'une requête valide se produit, PHP décidera d'activer ou non un GC en fonction des valeurs des variables globales session.gc_probability
et session.gc_divisor
Par défaut,
session.gc_probability = 1 session.gc_divisor = 100
est C'est. a dit qu'il y a 1% de possibilité de démarrer GC (c'est-à-dire qu'un seul GC sur 100 requêtes sera démarré avec l'une des 100 requêtes
Cependant, si votre serveur Web a plusieurs sites, quand il y en a). S'il y a plusieurs sites, GC peut produire des résultats inattendus lors du traitement des sessions. La raison est la suivante : lorsque GC fonctionne, il ne fait pas la distinction entre les sessions sur différents sites
Alors, comment résoudre ce problème ?
1. Modifiez session.save_path
, ou utilisez session_save_path()
pour enregistrer le session
de chaque site dans un répertoire dédié
2. Améliorez le taux de démarrage de GC, quand À mesure que le taux de démarrage du GC augmente, les performances du système diminueront en conséquence, ce qui n'est pas recommandé
3. Déterminez le temps de survie du session
actuel dans le code et utilisez session_destroy()
pour ; delete;
session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440
Ces trois combinaisons de configuration construisent le mécanisme de récupération de place de la session côté serveur
session.gc_probability
et session.gc_divisor
constituent la probabilité d'exécuter le nettoyage de session. que le serveur a une certaine probabilité d'appeler régulièrement la fonction gc pour nettoyer la session. La session est nettoyée, et la probabilité de nettoyage est : gc_probability/gc_divisor
Par exemple : 1/100
signifie que lorsque chaque nouvelle session est initialisée, il y a Il y a une probabilité de
1%
que le programme de collecte des déchets soit démarré, et la norme de nettoyage est session.gc_maxlifetime
Heure définie.
session.gc_divisor
et session.gc_probability
définissent ensemble la probabilité de démarrer le processus gc(garbage collection 垃圾回收)
à chaque initialisation de session.
Cette probabilité est calculée à l'aide de gc_probability/gc_divisor
. Par exemple, 1/100 signifie qu'il y a 1%
probabilité de démarrer le processus gc à chaque requête. session.gc_divisor
La valeur par défaut est 100
.
Par exemple :
session.gc_maxlifetime = 60 session.gc_divisor = 1000 session.gc_probability = 1
signifie que chaque fois qu'un millier d'utilisateurs appellent session_start()
, un mécanisme de garbage collection sera exécuté à 100% pour supprimer les fichiers de session inutiles sur le disque.
Remarque : Généralement, pour certains grands portails, il est recommandé d'augmenter le session.gc_divisor
pour réduire les frais généraux
Ensuite, je montrerai à travers un exemple comment le configurer pour appeler gc ( Garbage collecte) processus !
En configurant le fichier php.ini, modifiez les informations suivantes :
session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉 session.gc_probability = 1000
Car la probabilité que le processus gc soit appelé est calculée par gc_probability/gc_divisor
, ici je vais changer session.gc_probability
devient 1000
, et session.gc_divisor est également 1000
par défaut. Le processus gc sera appelé à chaque fois que la fonction session_start() sera exécutée.
Ouvrez trois sessions et créez trois session
fichiers correspondants. Si chaque fichier n'est pas appelé dans les 60 secondes, il sera considéré comme un "fichier indésirable" et attendra que le processus gc l'appelle. "fichiers indésirables" sera unlink
, car j'ai changé la probabilité que gc soit appelé à 100 % en modifiant le fichier de configuration php.ini
, donc ensuite, si j'utilise à nouveau un navigateur lors de l'actualisation de la page, il ne devrait y avoir que l'un des trois session
fichiers restants
session.save_handler = files
est par défaut un fichier, qui définit comment la session est enregistrée côté serveur file
signifie enregistrer sesion
dans un fichier temporaire, si nous. Si vous souhaitez personnaliser d'autres façons de l'enregistrer (comme l'utilisation d'une base de données), nous devons définir cet élément sur user
.
Recommandations associées : "Tutoriel PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!