Maison > Article > développement back-end > Que faire si la session php ne fonctionne pas
La solution au problème selon lequel la session php ne fonctionne pas : ouvrez d'abord le fichier de configuration php ; puis recherchez les éléments de configuration liés à la session ; puis créez un nouveau fichier de session et définissez les autorisations ; déposer.
Recommandé : "Tutoriel vidéo PHP"
Comment résoudre l'échec de session dans les projets php
J'ai pris la navette du travail aujourd'hui. Alors que j'étais sur le point d'arriver à la gare, le chef de mon ancienne entreprise m'a envoyé un message QQ, qui signifiait éteindre les incendies. Je suis revenu et j'ai demandé en détail sur l'ordinateur. La description du leader est la suivante
Cette adresse, s'il vous plaît, aidez-moi à comprendre pourquoi après avoir téléchargé le test et publié la tâche, lors de la configuration de la feuille de réponses, la session a disparu
Parce que j'étais le backend au début de ce projet. Il a été développé par une seule personne, le problème a donc été trouvé rapidement. Le processus est le suivant : l'utilisateur télécharge le document de test via le composant js. Dans la méthode de téléchargement du document de test, la session est utilisée pour stocker les informations détaillées du document de test qui vient d'être téléchargé, telles que le nom, le suffixe et l'identifiant stocké dans le fichier. table des ressources, etc. Une fois le téléchargement réussi, cliquez sur d'autres options sur la page, telles que l'école, la classe, le niveau de difficulté, etc., et enfin cliquez sur Soumettre. Dans la méthode de traitement de la soumission, il est jugé au début si le. la valeur de session qui vient d'être téléchargée existe. Si elle n'existe pas, elle passera à la page d'accueil du document de test. J'ai imprimé $_SESSION dans cette méthode, mais cela n'avait aucune valeur. C'était étrange, cela fonctionnait bien avant. J'ai donc demandé quand cela avait commencé, et le chef a dit que alors qu'il était sur le point de quitter le travail dans l'après-midi, le professeur a appelé et a dit que le téléchargement du test et la définition de la feuille de réponses avaient échoué, et cela a continué à sauter. Ensuite, j'ai demandé à nouveau si l'environnement du serveur avait été modifié, et le leader a répondu non.
Puisqu’il y a un problème, résolvons-le. Il se trouve que je lisais le livre "PHP Core Technology and Best Practices" pendant cette période, qui contient une description détaillée des sessions et des cookies, et cela a également approfondi ma compréhension des deux. J'ai donc d'abord ouvert le fichier de configuration php, trouvé les éléments de configuration liés à la session et découvert que session.save_path était /data2/session. Je me souviens qu'il était défini sur /data1/session auparavant. J'ai donc quitté et jeté un œil au chemin. Au début, je pensais que le répertoire avait des autorisations insuffisantes, mais plus tard, j'ai vu qu'un tel répertoire n'existait pas du tout. J'ai donc créé un nouveau fichier, défini les autorisations, l'ai téléchargé à nouveau et tout est revenu à la normale.
En écrivant ceci, je souhaite également parler de quelques points techniques liés à la séance. La session est stockée côté serveur et est stockée dans des fichiers par défaut (session.save_handler = files). Alors, comment la session est-elle générée ? La session est générée via la fonction session_start(). Lorsque cette fonction est exécutée, un fichier et un identifiant de session unique correspondant sont générés dans le répertoire où la session est stockée. Les données du fichier de session peuvent être récupérées via l'identifiant de session. . Puisqu'un nouveau fichier de session sera généré à chaque fois que session_start() est exécuté, comment utiliser le fichier de session précédemment généré ? Juste session_id ($session_id), alors le fichier de session ne sera pas nouvellement généré, mais l'identifiant de session qui lui correspond le sera. être lu. Par défaut, l'identifiant de session utilise le cookie sur le client (navigateur) pour enregistrer l'identifiant de session (appuyez sur F12 sur le navigateur Chrome, cliquez sur Ressources-cookies, vous pouvez voir), utilisez $_COOKIE['PHPSESSID'] Peut être obtenu. Ce PHPSESSID est le nom par défaut de l'identifiant de session. Il peut être défini par session.name dans php.ini. Utilisez session_name() dans le script pour obtenir le nom de l'identifiant de session. Chaque fois que le navigateur communique avec le serveur, le navigateur transmet l'identifiant de session au serveur, et le serveur trouvera le fichier de session correspondant en fonction de l'identifiant de session transmis, obtiendra les informations correspondantes et effectuera les opérations associées. Une fois que le client (navigateur) désactive les cookies, le serveur ne recevra pas l'identifiant de session. À ce stade, l'identifiant de session doit être transmis explicitement. Deux méthodes : transmettre manuellement l'identifiant de session via l'URL ; transmettre l'identifiant de session via le formulaire masqué. Les deux méthodes ci-dessus nécessitent que la valeur session.use_trans_sid dans l'environnement PHP du serveur soit 1.
Après tant de verbosité, ce sont finalement les mots de Linus : « parler ne coûte pas cher, montre-moi le code ».
<?php session_start(); $_SESSION['arr'] = array('name' => 'molaifeng', 'hobby' => 'php'); ?> <a href="testSession.php?<?php echo session_name(); ?>=<?php echo session_id()?>">testSession</a>rrree
Vous pouvez comprendre le code, donc je ne vais pas l'expliquer.
Enfin, pour résumer, dans des circonstances normales, un échec de session entre pages se produit, ce qui correspond essentiellement aux points énumérés ci-dessus. 1. Le session.save_path est incorrect, par exemple des autorisations insuffisantes ou le répertoire n'existe pas ; 2. La valeur session.use_trans_sid dans la configuration PHP du serveur est 0. Les cookies sont désactivés sur le client. Mais je pense que la fréquence de la première situation devrait être assez élevée.
【mis à jour le 21/05/2018】
Se connecter vendredi soir et tomber sur un autre piège. Le framework utilise CI et les écritures de session sur les tables MySQL. Au début, les symptômes étaient exactement les mêmes que ceux décrits ci-dessus, j'ai donc réinitialisé le répertoire de visualisation et donné les autorisations de lecture et d'écriture appropriées, mais rien ne s'est produit. Plus tard, j'ai découvert que la table était une table mémoire. Je pensais qu'elle dépassait la valeur maximale de la table mémoire, j'ai donc vidé la table, mais le problème persistait. Finalement, après avoir comparé les différences entre les deux versions, j'ai constaté que deux nouveaux champs étaient ajoutés lors de l'enregistrement de la session, j'ai donc utilisé la méthode d'élimination, j'ai d'abord annoté les deux, puis je les ai ouverts un par un, et j'ai finalement localisé le problème. Il s'avère qu'une nouvelle valeur est utilisée pour sauvegarder toutes les valeurs d'une table de type. Lors du test au début, il n'y avait que quelques valeurs. Plus tard, lors de sa mise en ligne, plus d'une centaine de valeurs. ont été ajoutés. En même temps, le champ ne faisait que 3000 personnes. J'ai donc d'abord augmenté la taille du champ et l'ai laissé vérifier en ligne, puis j'ai modifié la logique correspondante afin que toutes les valeurs du tableau ne soient pas écrites.
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!