La solution au problème d'échec de la session PHP et de non-livraison : écrivez d'abord un fichier php avec le contenu "<?=phpinfo()?>" puis transmettez-le au serveur pour voir le configuration des paramètres du serveur, indiquant que l'ID utilisateur est la session identifiée ; attribuez enfin le nom de la session à Havi et affichez la session.
En PHP, la session ne peut pas passer à la page suivante. Il existe généralement deux situations :
Écrivons d'abord un fichier php : <?=phpinfo()?>
et envoyons-le au serveur pour voir la configuration des paramètres du serveur.
Allez dans la section session
et voyez que le paramètre session.use_trans_sid
est défini sur 0.
Ce paramètre spécifie s'il faut activer la prise en charge transparente du SID, c'est-à-dire si session
est transmis avec l'URL. Ma compréhension personnelle est qu'une fois ce paramètre défini sur 0, chaque URL ouvrira un session
. De cette façon, les pages suivantes ne peuvent pas suivre la session de la page précédente, ce que nous appelons non livrable. Les deux pages génèrent deux session
fichiers côté serveur et ne sont pas liés.
Une solution consiste donc à changer la valeur de php.ini
à 1 dans le fichier de configuration session.use_trans_sid
.
Bien sûr, nous savons que tout le monde n'a pas le pouvoir de modifier la configuration de php, alors quelles autres solutions indirectes existe-t-il ?
Utilisons deux exemples pour illustrer :
Fichier 1 test1.php
<?php //表明是使用用户ID为标识的session session_id(SID); //启动session session_start(); //将session的name赋值为Havi $_SESSION['name']=”Havi”; //输出session,并设置超链接到第二页test2.php echo “<a href=\”test2.php\”>”.$_SESSION['name'].”</a>”; ?>
Fichier 2 : test2.php
<?php 表明是使用用户ID为标识的session session_id(SID); //启动session session_start(); //输出test1.php中传递的session。 echo “This is “.$_SESSION['name']; ?>
Chaque page doit écrire pour ouvrir la session, sinon elle ne fonctionnera toujours pas correctement
Donc , le point clé Ajoutez session_start();
avant session_id(SID)
, pour que lors de la conversion de la page, le serveur utilise le session
enregistré par l'utilisateur dans le dossier session
du serveur, ce qui résout le problème de transmission.
Cependant, certains collègues ont signalé que si le session
de plusieurs utilisateurs est écrit dans un seul SID, la valeur de la session ne peut pas être exercée. Il existe donc une autre façon de résoudre ce problème. Vous n'avez pas besoin d'ajouter session_id(SID);
Le principe est que vous disposez des autorisations de configuration sur le php.ini du serveur :
<🎜. >output_buffering<code><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">output_buffering</span><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;"></span>
session
phpinfo.php
La deuxième raison possible est que vous n'avez pas l'autorisation de lecture sur le dossier où est enregistré sur le serveur, ou que vous revenez à session
et voir
<span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">session.save_path: var/tmp</span>
所以就是检查下var/tmp文件夹是否可写。
写一个文件:test3.php来测试一下:
<? echo var_dump(is_writeable(ini_get(“session.save_path”))); ?>
如果返回bool(false),证明文件夹写权限被限制了,那就换个文件夹咯,在你编写的网页里加入:
//设置当前目录下session子文件夹为session保存路径。$sessSavePath = dirname(__FILE__).’/session/’; //如果新路径可读可写(可通过FTP上变更文件夹属性为777实现),则让该路径生效。if(is_writeable($sessSavePath) && is_readable($sessSavePath)){session_save_path($sessSavePath);}
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!