12
votes

ID de session PHP change entre pages

J'ai un problème où je perds la session PHP entre 2 pages.

Le session_start () est inclus dans un fichier appelé session-inc.php dans chaque page nécessitant une session à définir. Cela fonctionne pour toutes les pages du site sauf une page particulière, membre-profil.php. Lorsque cette page est visitée une nouvelle session avec un identifiant différent (le même nom de session) est défini et utilisé à la place.

Quelques détails:

  • Nom de la session est défini manuellement
  • Toutes les pages sont sur le même serveur sous le même nom de domaine
  • Si je mettais une session_start supplémentaire () ci-dessus sur l'inclusion ('session-inc.php') dans le fichier de membre-profil.php, la session est reportée correctement
  • J'ai essayé de définir la session_cookie_domaine et session.Session_Name dans le .htaccess, cela a fonctionné pour ce domaine, mais il a arrêté la session étant transmis au domaine de paiement
  • Nous exécutons Apache 2.2.6 avec PHP 5.2.5

    mettre la session_start () ci-dessus de l'inclusion ("session-inc.php") dans le fichier membre-profil.php est la solution rapide et sale pour ce problème, mais je me demande si quelqu'un sache pourquoi cela se produirait .

    acclamations


1 commentaires

Pourriez-vous publier le contenu de votre session de fichier-inc.php? Est inclus ('session-inc.php'); La première chose que vous faites dans membre-profil.php?


10 Réponses :



0
votes

a trouvé le problème

Il y avait une marque d'ordre d'octets au début de la principale inclut le fichier du deuxième domaine. Comme indiqué par Ken, je ne peux pas avoir de sortie avant le début d'une session, il ne définissait pas la session correctement.


0 commentaires

3
votes

Lors de la migration d'un site hérité de PHP4 sur PHP5, j'ai remarqué un paramètre de configuration PHP.ini qui provoque automatiquement PHP pour démarrer la session sur chaque demande. C'est une alternative à la mise en place de session_start () sur chaque page ...

Il existe plusieurs façons d'activer ce paramètre:

mettre la ligne suivante dans php.ini: < / p> xxx

ou mettre cela dans votre fichier de configuration de site virtual Apache ou .htaccess: xxx

et il devrait faire $ _session Changements disponibles sur toutes les pages


1 commentaires

Placer session_start () sur chaque page ne crée pas une nouvelle session sur chaque demande. Selon le manuel, session_start () crée une session ou reprend le courant en cours sur la base d'un identifiant de session transmis via une demande d'obtention ou de poste, ou passée via un cookie.



-1
votes

a trouvé que le problème était une marque d'ordre d'octets (BOM) étant expulsé au début du fichier. Enlevé de cela et il a triché le problème de la session.


0 commentaires

2
votes

Je viens de rencontrer ce problème. Fait intéressant, parcourez via http://127.0.0.1 au lieu de http: // localhost m'a aidé.


1 commentaires

Ce n'est pas une réponse, c'est un moyen d'éviter le problème.



0
votes

solution: session.auto_start = sur dans le fichier: php.ini

Il a résolu le problème de la nouvelle génération d'identifiant de session sur la page Recharge (page d'actualisation de la page).

Le problème est apparu après la mise à jour de CPanel (et inclus Multi PHP), même la version PHP est restée la même.

Le fichier php.ini n'a pas eu cette variable du tout. Je suis allé dans cPanel -> MultiPHP INI Editor -> Mode Editeur (non basique, dans la base, vous n'avez pas ce paramètre) et ajouté la ligne. Appuyez sur SAVE.

Conseils / Quand utiliser cette solution: Pour déterminer si c'est le problème, mettez une ligne au tout début et à la toute fin de votre fichier index.php pour vérifier l'ID de session. Fonction d'utilisation: ID de session(); Naviguez via Pages / Rechargez la page. Si la valeur Session_ID change le problème n'est pas dans votre code et que cette solution doit résoudre votre problème (la session est perdue en dehors de votre code).

J'ai également essayé de vérifier la disponibilité de la session de sauvegarde sur le serveur Web (session.save_path) mais, même si c'était une avance, ce n'était pas le cas. J'imagine que c'est une "fonctionnalité" de CPanel avec une mise à jour du MultiPHP qui se produira assez souvent.


0 commentaires

0
votes

J'ai eu ce problème et la cause était que PHP ignorait tous les cookies après les 100 premiers. (i ont demandé à cette question d'essayer de savoir pourquoi , mais jusqu'à présent, personne n'a compris). Le navigateur envoiait le phpsessid *, mais puisqu'il s'agissait du 110e cookie, PHP l'ignorait.

Pour déterminer si ce problème est ce qui vous affecte, utilisez les outils de développement de votre navigateur pour examiner les cookies que le navigateur envoie avec la demande et comparez cette liste au tableau $ _cookie à PHP. Ils devraient être les mêmes. Mais si le navigateur envoie un phpsessid * et il n'y a pas de phpsessid * en $ _cookie, cela expliquerait pourquoi les sessions ne fonctionnent pas.

J'ai résolu le problème en ne faisant pas que mon site utilise tant de cookies, ce qui est une bonne pratique de toute façon.

* phpsessid est le nom de la session par défaut. Votre site peut utiliser un nom différent.


0 commentaires

0
votes

Pour résoudre le changement de session_id après chaque demande, vous modifiez le paramètre session.auto_start strong> et session.cookie_httparly strong> dans le fichier de configuration PHP.

Pour trouver le fichier Fichier de configuration PHP P>

session.auto_start = 1
session.cookie_httponly = 0


0 commentaires

0
votes

a trouvé le problème

Dans mon cas, il était dû aux paramètres de vernis s'il vous plaît vérifier vos paramètres de vernis. Phpsessid Vous pouvez exclure le cookie des paramètres de vernis.


0 commentaires

1
votes

Je viens de passer toute la journée à diagnostiquer ce problème dans mon projet IONIC3 - PHP. Tl; DR - Assurez-vous que votre client envoie en réalité des informations d'identification de la session.

Dans l'intérêt d'aider toute personne qui fait cette erreur, je partagerai comment j'ai trouvé le problème. J'ai utilisé ces outils pour diagnostiquer la session sur le client et le serveur:

1) Ajouter un fichier de test avec phpinfo () sur le serveur pour examiner les options de session PHP.

2) Examinez le code PHP pour vous assurer qu'aucune sortie, intentionnelle ou non intentionnelle ne se produit avant la ligne Session_Start (). Vérifiez la barre d'état du code Visual Studio pour vous assurer que la marque de commande d'octets (BOM) est absente des fichiers PHP.

3) Examinez les journaux PHP du serveur (dans /var/log/nginx/error.log pour moi). Ajouter des lignes ERROR_LOG () au fichier PHP pour vider le tableau Session_ID () ou $ _Session.

4) Utilisez TCPDump -an 'Port 80 ou Port 443' Pour voir le Demandes http et réponses actuelles. (C'est là que j'ai découvert les cookies manquants).

pour un fournisseur de données ionic3 La syntaxe correcte du client est la suivante: xxx

remarque le Souprentissement: vrai Il faut appeler souscrire à l'OBSHTTP () observable pour envoyer la demande.


0 commentaires