PHP ID de Session qui change à chaque requête
Je viens de migré mon application à partir d'un local WAMP à la réalité de serveur en ligne. Cela a causé des problèmes avec l'ID de session ne sont pas enregistrés comme il apparaît.
- J'ai vérifié pour les caractères indésirables en cours de sortie avant session_start
- Je n'arrive pas à trouver un quelconque fichier de session enregistré dans mon /tmp
Ce sont mes paramètres de session:
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
- Le serveur en ligne est en cours d'exécution: la Version de PHP 5.3.9 tandis que le WAMP est: la Version de PHP 5.3.5.
- En consultant les en-têtes envoyés et la réponse à chaque chargement de la page j'ai eu la suivante, la set-cookie envoie le session id et la réponse reçue envoie un nouveau comme si de rien n'était demandé.
- Je suis en cours d'exécution sur le site un aperçu de l'URL (SSL). Je ne sais pas si cela a quelque chose à faire, mon domaine n'est pas encore enregistré.
- Code d'erreur est très simple:
$sId = session_id();
if ($sId == '') { session_start(); }
Merci pour toutes les réponses. Je commence avec session_start(); maintenant, et je ne suis pas la vérification de la session_id() jusqu'à ce que plus tard dans l'exécution (juste pour savoir de laquelle il s'agit). Mon Id de session est toujours rafraîchissant à chaque requête sans m'appeler un régénérer Id ou quelque chose de semblable. Simplement session_start -> magasin de certaines variables -> fin de l'exécution (devrait write_close) -> page suivante request -> Id de session et des variables n'existent pas.
Il semble qu'il a été l'hôte de la page d'aperçu du problème. Merci à vous tous pour vos réponses!
Il semble qu'il a été l'hôte de la page d'aperçu du problème. Merci à vous tous pour vos réponses!
OriginalL'auteur user1811930 | 2012-11-09
Vous devez vous connecter pour publier un commentaire.
J'ai juste eu et résolu exactement le même problème.
Il s'avère que le cookie PHPSESSID (qui tient compte rendu de la session) a été envoyer, mais il a été ignoré par le serveur, de sorte que la session n'a pas été maintenue et le serveur redémarré la session à chaque fois que la page est rechargée ou des changements.
Le problème était que j'avais dans mon wp-config.php cette ligne:
Cela signifie que si la connexion n'est pas sécurisée, tous les cookies doit être ignoré, donc le serveur le cookie PHPSESSID et la session a été redémarré.
Vérifier votre wp-config.php ou votre init.php. Est un problème avec les cookies.
OriginalL'auteur David Prieto
Vous devez avoir à écrire la fonction session_start(); avant d'accéder à toutes les variables de session, sans elle vous ne pourrez pas accéder aux variables de session.
Essayer de mettre session_start() sur la première ligne du fichier.
OriginalL'auteur Yuvraj Jain
session_start
devrait être la première chose dans votre fichier, vous pouvez obtenir l'id de session après:OriginalL'auteur strmstn
Question est ancienne et a été résolu pour vous. Cependant, les réponses précédentes n'ont pas les aider dans cette situation, finalement. Donc, si quelqu'un a rencontrer de problème similaire, comme je l'ai fait, ici, c'est une autre approche:
Séances sont gérés à l'aide d'un cookie, généralement appelé
PHPSESSID
. Si le cookie n'est pas déclaré correctement et donc ne parvient pas à être inclus avec les demandes de l'utilisateur sur une autre session est démarrée à chaque demande résultant dans une situation au moins similaires à la vôtre.J'essayais de mettre en œuvre une application de fonctionner derrière un reverse proxy mapping des Url publiques à de multiples applications, par exemple pour
a été déléguée à un serveur derrière un proxy inverse à condition que
Pour PHP en cours d'exécution dans le contexte de
foo.example.com
avec préfixe de chemin/bar
plutôt que/foo/bar
réglage des paramètres du cookie de sessionPHPSESSID
pourrait poser des problèmes lorsqu'il est passé à la clientèle non désaisonnalisées. Cette observation a été vrai dans mon cas, au moins.OriginalL'auteur cepharum
Utiliser uniquement des caractères alphanumériques, comme l'ID de Session. J'ai eu ce problème lors de l'utilisation de "." dans le cadre de l'ID de Session.
OriginalL'auteur raoulsson
Il pourrait être causée par les trois caractères (BOM (Marque D'Ordre D'Octet)) qui sont injectés par certains programmes (c'est à dire dreamweaver, notepad) avant le
<?php
marqueur, donc thesession est en fait pas initialisé.Si vous avez
error_reporting
activé, vous verrezheaders already sent
..Vérifier votre fichier avec un éditeur hexadécimal pour voir si votre éditeur injecté tous les caractères.
OriginalL'auteur Ogrodnik
Vous devriez commencer la session pour utiliser session_* les fonctions. Donc, la première chose que vous devez faire est de:
alors vous pouvez demander de l'id de session comme ceci
Remarque qu'il n'est pas recommandé d'enregistrer les sessions dans le dossier public est à la disposition du public puisque les visiteurs ont pu trouver le dossier où vous enregistrez les cours et la liste de tous d'entre eux. Ensuite, ils pourraient injecter cookie de session dans leur navigateur et prendre le contrôle de visiteurs d'autres comptes d'utilisateurs. Si vous avez vraiment besoin de faire cela, limiter l'accès à votre dossier /tmp. Par exemple mettre .htaccess dans ce dossier avec ce code
Ou trouver un autre moyen de le désactiver les utilisateurs du navigateur de votre dossier /tmp, car cela peut être un problème de sécurité.
Si vous souhaitez modifier l'id de session à chaque demande, pour des raisons de sécurité, vous pouvez utiliser la fonction session_regenerate_id
Vous ferait quelque chose comme ceci:
De cette façon, même si quelqu'un vole votre cookie de session, l'id de session serait changé à chaque requête. Et ce pourrait être votre problème. Il y a un moyen pour PHP de régénérer de nouvelles id de session à chaque requête, donc cela pourrait être la chose qui vous dérange.
Autant que la configuration de php.les directives ini, vous devez vérifier si votre fournisseur d'hébergement vous a permis de changer .directive ini vous êtes à essayer de changer. Il dépend de la configuration du serveur si vous pouvez changer .directive ini ou pas. Et la façon dont les sessions se comportent peut être différente de l'hébergement à l'hébergement, en fonction de leur configuration de serveur. La plupart des choses peuvent être modifiées à l'aide de fonctions de php ou de l'utilisation de ini_set avec cette liste de directives php.les directives ini
Eh bien je suppose que l'id de session est régénéré à chaque reqeuest. Ce type d'application est qui? Avez-vous écrit tout cela forme de zéro, ou de ses framework mvc? Vous devriez inspecter le code et vérifier si la session est regénérée, ou demander à l'hébergeur ne ils régénèrent les sessions.
J'ai vérifié les propriétés de session en PHP et il ne semble pas être le réinitialiser. Je vais poster une question au fournisseur en cas de besoin. Si autre chose me vient à l'esprit n'hésitez pas à me contacter à nouveau. Le script est écrit à partir de zéro, je suis en utilisant la mémoire tampon de sortie et de début de la session avant toute chose est retournée. Donc, c'est inexplicable. Les erreurs sont également sur de sorte que quelque chose allait venir si c'était un problème de sortie. Merci encore.
Eh bien, il pourrait être le problème avec le serveur. Peut-être qu'ils le configurer pour régénérer l'id de session pour la sécurité. Ne sais pas vraiment. Aurait besoin de prendre un coup d'oeil au code ou à la configuration du serveur pour vous aider à mieux avec celui-ci.
OriginalL'auteur Matija