Maison > développement back-end > tutoriel php > mécanisme de récupération de place de session php

mécanisme de récupération de place de session php

藏色散人
Libérer: 2023-04-08 16:48:02
avant
2184 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal