Maison  >  Article  >  développement back-end  >  Analyse du mécanisme SESSION de PHP

Analyse du mécanisme SESSION de PHP

小云云
小云云original
2017-11-08 15:10:121672parcourir

Le mécanisme par défaut utilise des fichiers disque pour implémenter les sessions PHP. Configuration php.ini : session.save_handler = files

1. session_start()

A. session_start() est le début du mécanisme de session car il a une certaine probabilité de démarrer le garbage collection. la session est stockée Dans le fichier,

Le propre garbage collection de PHP n'est pas valide et le recyclage de SESSION nécessite la suppression du fichier. Cette probabilité est déterminée par la configuration de php.ini,

mais certains systèmes. Il s'agit de session.gc_probability =0, ce qui signifie que la probabilité est de 0, mais le garbage collection est implémenté via le script cron.

session.gc_probability =1
session.gc_divisor =1000
session.gc_maxlifetime =1440//过期时间 默认24分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000,
//不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
session.save_path =//好像不同的系统默认不一样,有一种设置是 “N;/path”
//这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

B. La session déterminera s'il existe actuellement $_COOKIE[session_name()] ; session_name() renvoie la valeur de la clé COOKIE qui enregistre le session_id

Cette valeur peut être. trouvé à partir de php.ini

session.name = PHPSESSID //默认值PHPSESSID

C. S'il n'existe pas, un session_id sera généré, puis le session_id généré sera transmis au client en tant que valeur COOKIE

. équivaut à effectuer l'opération COOKIE suivante. Notez que cette étape effectue l'opération setcookie() qui est envoyée dans l'en-tête

Il n'y a pas de sortie avant cela. vous utilisez cette fonction, elle ne peut pas être sortie avant qu'il y ait une sortie.

setcookie(session_name(),
session_id(),
session.cookie_lifetime,//默认0
session.cookie_path,//默认’/’当前程序跟目录下都有效
session.cookie_domain,//默认为空
)

D. S'il existe, alors session_id =$_COOKIE[session_name];

Allez ensuite dans le dossier spécifié par session.save_path pour trouver le fichier nommé 'SESS_'.session_id () Fichier.

Lisez le contenu du fichier, désérialisez-le, puis placez-le dans $_SESSION

2 Attribuez une valeur à $_SESSION

Par exemple, ajoutez une nouvelle valeur $_SESSION[' test'] ='blah'; Ensuite, cette $_SESSION ne sera conservée en mémoire qu'à la fin de l'exécution du script,

écrit la valeur de $_SESSION dans le dossier spécifié par. session_id, puis le ferme.Ressources associées. À ce stade, il est possible d'effectuer des opérations pour modifier le session_id,

, comme détruire un ancien session_id et générer un nouveau session_id. opérations de session personnalisées et conversion de rôle,

Par exemple, Drupal. Un utilisateur anonyme de Drupal a une SESSION Lorsqu'il se connecte, il doit utiliser un nouveau session_id

if (isset($_COOKIE[session_name()])) {
setcookie(session_name(),”,time() 42000,’/’);//旧session cookie过期
}
session_regenerate_id();//这一步会生成新的session_id
//session_id()返回的是新的值


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!

Déclaration:
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