La session est une variable de stockage de données très importante dans le développement. Elle peut transférer des valeurs entre différentes pages. Présentons-nous quelques problèmes rencontrés lors de l'utilisation de Session qui sont expirés et invalides. Il est nécessaire que les amis puissent se référer à <.>
Analyse invalide de session PHP
Au cours du processus de développement PHP, certains amis peuvent souvent rencontrer le problème que les fichiers générés par la session ne peuvent pas être automatiquement effacés. non pas qu'il soit vraiment impossible de les effacer, mais il existe un problème de probabilité. Tant que votre site a un trafic suffisamment important, ces fichiers peuvent être automatiquement effacés. Si le nombre de visites est relativement faible et que les fichiers ne sont pas agréables à l'œil, vous pouvez réaliser l'effacement automatique des fichiers de session en le configurant dans php.ini. La configuration spécifique est la suivante : Rechercher <.>session.gc_probability = 1
session.gc_pisor = 1000
Les deux paramètres ci-dessus sont en fait cette probabilité. Par défaut, elle est de 1/1000.
Changez session.gc_pisor = 1000 en session.gc_pisor = 100
Si vous souhaitez obtenir un temps réel complet, vous pouvez changer ce paramètre en 1, donc la probabilité est de 100 %
Découvrez comment fonctionne la session
Aperçu : 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〃;
#Nom de la variable|Type : longueur : valeur
Supprimer le fichier de session ici signifie que la session correspondante n'est pas valide.
2. Comment la session existe-t-elle côté client (généralement le 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)Si la "dernière heure de modification" à "maintenant" dépasse gc_maxlifetime (la valeur par défaut est 1440) secondes, ce fichier de session est considéré comme expiré lors du recyclage de la prochaine session, si ce fichier l'a encore. n'a pas été modifié, 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.Ainsi, modifier la variable gc_maxlifetime dans le fichier php.ini peut prolonger le délai d'expiration de la session : (par exemple, on modifie le délai d'expiration à 86400 secondes)
Ensuite, redémarrez simplement votre service Web (généralement Apache).
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
#La probabilité est gc_probability/gc_pisorsession.gc_pisor = 100
Remarque 1 : en supposant que gc_maxlifetime=120 dans ce cas, si un fichier de session a été modifié pour la dernière fois il y a 120 secondes, alors la session sera toujours valide avant le prochain recyclage (probabilité 1/100).
5. Quelques cas particuliers
Car le mécanisme de recyclage va vérifier "l'heure de dernière modification" du fichier, si une session est active mais que le contenu de la session n'a pas changé, alors la session correspondante Le fichier n'a pas changé, et le mécanisme de recyclage pensera qu'il s'agit d'une session qui n'a pas été active depuis longtemps et la 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。
总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。
我们下面来详细看看一些其它的设置session时间的问题
Session 过期时间参数
设定过期时间参数, 主要是设定 session.gc_maxlifetime 的参数即可, 再保险一点的设定, 就设定下面这两个参数.
ini_set('session.cookie_lifetime', 0); // 可用 print_r(session_get_cookie_params()); 观察 ini_set('session.gc_maxlifetime', 3600); // 可用 echo ini_get("session.gc_maxlifetime"); 观察
session_cookie_lifetime 设为 0 的话, 代表等到 browser 才把此 cookie 清掉.(session 和 browser cookie 是有相关的)
如果懒得想这些, 直接用下面的 function 就可以了
Session 过期时间程式
<?php function start_session($expire = 0) { if ($expire == 0) { $expire = ini_get('session.gc_maxlifetime'); } else { ini_set('session.gc_maxlifetime', $expire); } if (empty($_COOKIE['PHPSESSID'])) { session_set_cookie_params($expire); session_start(); } else { session_start(); setcookie('PHPSESSID', session_id(), time() + $expire); } } ?>
使用方式
于程式最上方加入: start_session(600); // 代表 600 秒后会过期 (取代原本 session_start())
如果要再延长过期时间, 只要再做修改即可.
但是有个问题要注意, 就是 PHP 的 session 预设是存成 file, 所以 /tmp 可能会因这样设定而爆掉(档案太多), 通常解法是把 session 存进 DB/memcache 中.
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
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!