Solution au problème selon lequel PHP ne peut pas transférer de session : 1. Activez les cookies dans le client ; 2. Vérifiez les problèmes du navigateur et accédez aux cookies ; 3. Activez session.use_trans_sid dans php.ini.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Solution au problème selon lequel SESSION ne peut pas être transmise d'une page à l'autre en PHP
Amis qui ont utilisé SESSION en PHP Vous pouvez rencontrer un tel problème, la variable SESSION ne peut pas être transmise entre les pages. Cela m'a troublé pendant plusieurs jours, et j'ai finalement réfléchi et résolu le problème en recherchant des informations. Je pense que les raisons de ce problème sont les suivantes :
1. Les cookies sont désactivés sur le client
2 Il y a un problème avec le navigateur et les cookies sont temporairement inaccessibles
3. session.use_trans_sid = 0 dans php.ini. ou lors de la compilation L'option --enable-trans-sid n'est pas activée
Pourquoi cela se produit-il ? Laissez-moi vous expliquer ci-dessous :
La session est stockée côté serveur (la session est stockée sous forme de fichier par défaut). Selon l'identifiant de session fourni par le client, le fichier de l'utilisateur est obtenu et la valeur de la variable est obtenue. L'identifiant de session peut utiliser le cookie du client ou Http1.1. La Query_String du protocole (la partie après le "?" de l'URL consultée) est envoyée au serveur, puis le serveur lit le répertoire de session. En d'autres termes, l'identifiant de session est la carte d'identité permettant d'obtenir la variable de session stockée sur le service. Lorsque le code session_start(); est exécuté, un fichier de session est généré sur le serveur et un identifiant de session correspondant de manière unique est généré. La variable de session est définie pour être stockée dans le fichier de session qui vient d'être généré sous une certaine forme. Grâce à l'identifiant de session, les variables définies peuvent être récupérées. Après avoir traversé la page, pour utiliser la session, vous devez réexécuter session_start() ; un autre fichier de session sera généré, et l'identifiant de session correspondant sera généré en conséquence. En utilisant cet identifiant de session, vous ne pourrez pas récupérer le premier fichier de session mentionné. ci-dessus, car cet identifiant de session n'est pas la "clé" pour l'ouvrir. Si vous ajoutez le code session_id($session id); avant session_start();, un nouveau fichier de session ne sera pas généré, et le fichier de session correspondant à cet id sera lu directement.
La session en PHP utilise le cookie du client pour enregistrer l'identifiant de session par défaut, donc lorsqu'il y a un problème avec le cookie du client, cela affectera la session. Il faut noter que la session ne doit pas nécessairement s'appuyer sur des cookies, ce qui est aussi l'avantage de la session par rapport aux cookies. Lorsque les cookies du client sont désactivés ou qu'il y a un problème, PHP attachera automatiquement l'identifiant de session à l'URL, afin que la variable de session puisse être utilisée sur plusieurs pages via l'identifiant de session. Mais cette pièce jointe a aussi certaines conditions, à savoir "session.use_trans_sid = 1 dans php.ini ou l'option --enable-trans-sid est activée lors de la compilation".
Comprenant les principes ci-dessus, mettons maintenant de côté les cookies et utilisons les sessions. Il existe trois manières principales :
1. Définissez session.use_trans_sid = 1 dans php.ini ou activez l'option --enable-trans-sid pendant la compilation. pour laisser PHP transmettre automatiquement l'identifiant de session entre les pages.
2. Transmettez manuellement la valeur via l'URL et transmettez l'identifiant de session via le formulaire masqué.
3. Enregistrez session_id dans un fichier, une base de données, etc., et appelez-le manuellement pendant le processus interpage.
Illustrons avec un exemple :
s1.phps2.php
Maintenant, si vous fermez manuellement le cookie sur le client et que vous l'exécutez à nouveau, vous risquez de ne pas obtenir le résultat. Si vous ne parvenez pas à obtenir le résultat, alors "définissez session.use_trans_sid = 1 dans php.ini ou activez l'option --enable-trans-sid lors de la compilation", et vous obtiendrez le résultat "République populaire de Chine"php
session_start (); $_SESSION [ ' var1 ' ] = " La république populaire de chine " ;
$url = " Page suivante " ;
écho $url ; ?>
php
Exécutez le code ci-dessus. Si le cookie client est normal, vous devriez pouvoir obtenir le résultat "République populaire de Chine".
session_start (); écho " La valeur de la variable de session transmise var1 est : " . $_SESSION [ ' var1 ' ];
?>
C'est la façon ci-dessus de dire 1.
Parlons de l'approche 2 ci-dessous :
Le code modifié est le suivant :
s1.phpphpsession_start (); $_SESSION [ ' var1 ' ] = " La république populaire de chine " ; $sn = id_session (); $url = " Page suivante " ;
écho $url ; ?>
s2.php méthode 3 : login.htmlphp
id_session ( $_GET [ ' s ' ]);
session_start ();
écho " 传递的session变量var1的值为 : " . $_SESSION [ ' var1 ' ];
?>
&Lt ; HTML >≪ tête >&Lt ; titre > Se connecter ≪/ titre >
&Lt ; méta http - équivalent = " Type de contenu " contenu = " texte/html; jeu de caractères = GB2312 " >
≪/ tête >
&Lt ; corps > 请登录:
&Lt ; nom du formulaire = " se connecter " méthode = " poste "actions = " ma connexion1.php " >
用户名 :≪ type d'entrée = " texte " nom = " nom " >≪ br >
口 令 :≪ type d'entrée = " mot de passe " nom = " passer " >≪ br >
&Lt ; type d'entrée = " soumettre " valeur = " 登录 " >
≪/ formulaire >
≪/ corps >
≪/ HTML >
mylogin1.php
dab9e16aa2ce38d1b59590711cd18413mylogin2.php
php
$fp = fouvert ( " e:/tmp/phpsid.txt " , " r " );
$côté = peur ( $fp , 1024 );
ffermer ( $fp );
id_session ( $côté );
session_start ();
si ( isset ( $_SESSION [ ' utilisateur ' ]) && $_SESSION [ ' utilisateur ' ] = " laogong " ) {
écho " Déjà connecté ! " ;
}
autre {
// Connectez-vous avec succès pour effectuer les opérations associées
écho " Non connecté, aucun droit d'accès " ;
écho " Veuillezconnectez-vous " ;
Mourir ();
}
?>
Veuillez également désactiver le test des cookies, nom d'utilisateur : laogong mot de passe : 123. Ceci permet d'enregistrer l'identifiant de session via un fichier, le fichier est : e:/tmp/phpsid.txt, veuillez décider du nom ou du chemin du fichier selon votre propre système.
Quant à la méthode base de données, je ne donnerai pas d'exemple, elle est similaire à la méthode fichier.
Pour résumer, les méthodes ci-dessus ont une chose en commun, qui est d'obtenir l'identifiant de session sur la page précédente, puis de trouver un moyen de le transmettre à la page suivante. Ajoutez le code session_id (identifiant de session transmis) avant le. session_start(); code sur la page suivante);
Apprentissage recommandé : "Tutoriel vidéo 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!