Comment modifier le temps de survie d'une session en php

王林
Libérer: 2023-03-08 14:38:01
avant
2214 Les gens l'ont consulté

Comment modifier le temps de survie d'une session en php

Tout d'abord, définissons manuellement la durée de vie de la session, comme suit :

<?php session_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?>
Copier après la connexion

En fait, Session fournit également une fonction session_set_cookie_params(); la Session. , cette fonction doit être appelée avant l'appel de la fonction session_start() :

<?php // 保存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_SESSION["admin"] = true; ?>
Copier après la connexion

Si le client utilise IE 6.0, il y aura quelques problèmes avec le paramètre de fonction session_set_cookie_params(); nous appelons donc toujours la fonction setcookie manuellement pour créer des cookies.

Réglage du délai d'expiration de session en php

De nombreuses personnes sur Internet ont donné la réponse : modifiez session.gc_maxlifetime dans le fichier de configuration php. Si vous souhaitez en savoir plus sur le mécanisme de recyclage de session, continuez à lire. (L'environnement de cet article est php5.2)

Présentation : Chaque requête php a une probabilité de 1/100 (valeur par défaut) de déclencher le "recyclage de session". Si un "recyclage de session" se produit, les fichiers /tmp/sess_* seront vérifiés. Si le temps de dernière modification dépasse 1440 secondes (la valeur de gc_maxlifetime), ils seront supprimés, ce qui signifie que ces sessions ont expiré.

1. Comment existe-t-il une session côté serveur (généralement Apache avec module PHP) ?

Par défaut, php enregistrera la session dans le répertoire /tmp, et le nom du fichier sera comme ceci : sess_01aab840166fd1dc253e3b4a3f0b8381. Chaque fichier correspond à une session.

more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 username|s:9:”jiangfeng”;admin|s:1:”0″; #变量名|类型:长度:值
Copier après la connexion

Supprimer le fichier de session ici signifie que la session correspondante n'est pas valide.

(Partage vidéo d'apprentissage :Tutoriel vidéo php)

2. Comment existe-t-il la session côté client (généralement un navigateur) ?

La session est côté navigateur, il vous suffit de sauvegarder l'ID de session (l'ID unique généré par le côté serveur). Il existe deux manières de l'enregistrer : dans les cookies et dans les URL. Si l'ID de session est enregistré dans le cookie, vous pouvez voir qu'il existe une variable PHPSESID dans le cookie du navigateur. S'il est passé par URL, vous pouvez voir une URL sous la forme :
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381. (Côté serveur, utilisez session.use_cookies pour contrôler quelle méthode est utilisée)

3. Côté serveur, comment PHP détermine-t-il si le fichier de session a expiré ?

Si le "temps de dernière modification" à "maintenant" dépasse gc_maxlifetime (la valeur par défaut est 1440) secondes, le fichier de session est considéré comme expiré. Lorsque la session suivante est recyclée, si le fichier n'a pas été modifié, le fichier est considéré comme expiré. Le fichier de session sera supprimé (la session expirera).

Pour faire simple, si je me connecte à un site internet et qu'il n'y a aucune opération dans un délai de 1440 secondes (valeur par défaut), alors la session correspondante est considérée comme expirée.

Donc, modifiez la variable gc_maxlifetime dans le fichier php.ini pour prolonger le délai d'expiration de la session : (par exemple, on modifie le délai d'expiration à 86400 secondes)

session.gc_maxlifetime = 86400
Copier après la connexion

Ensuite, redémarrez votre service Web (généralement Apache) fera l’affaire.

Remarque : En php5, l'expiration de la session utilise un mécanisme de recyclage. Le temps fixé ici est de 86400 secondes. Si la session n'a pas été modifiée dans un délai de 86400 secondes, elle ne sera supprimée qu'au prochain "recyclage".

3. Quand a lieu la séance de « recyclage » ?

Par défaut, pour chaque requête php, il y aura une probabilité de recyclage de 1/100, cela peut donc être simplement compris comme "un recyclage a lieu pour 100 requêtes php". Cette probabilité est contrôlée par les paramètres suivants

#概率是gc_probability/gc_divisor session.gc_probability = 1 session.gc_divisor = 100
Copier après la connexion

Remarque 1 : Supposons que dans ce cas gc_maxlifetime=120, si un fichier de session a été modifié pour la dernière fois il y a 120 secondes, alors il sera recyclé la prochaine fois (1/ probabilité 100) Avant que cela ne se produise, la session est toujours valide.

Remarque 2 : Si votre session utilise session.save_path pour enregistrer la session ailleurs, le mécanisme de recyclage de session peut ne pas traiter automatiquement les fichiers de session expirés. À ce stade, vous devez supprimer régulièrement les sessions expirées manuellement (ou crontab) : cd /path/to/sessions; find -cmin +24 | Le mécanisme vérifiera "l'heure de la dernière modification" du fichier, donc si une session est actif, mais le contenu de la session n'a pas changé, alors le fichier de session correspondant n'a pas changé et le mécanisme de recyclage considérera qu'il s'agit d'une période d'inactivité de longue durée et le supprimera. C'est quelque chose que nous ne voulons pas voir. Nous pouvons résoudre ce problème en ajoutant le code simple suivant :

60) $_SESSION['last_access'] = time(); ?>
Copier après la connexion

Le code tentera de modifier la session toutes les 60 secondes.

Résumé : Si vous souhaitez modifier le délai d'expiration de la session, modifiez simplement la variable gc_maxlifetime. La session PHP5 utilise un mécanisme de recyclage passif (garbage collection). Les fichiers de session expirés ne disparaîtront pas d'eux-mêmes, mais les sessions expirées seront traitées en déclenchant le « recyclage ».

Recommandations associées :

Tutoriel d'introduction à 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:cnblogs.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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!