Sessions PHP: $ _SESSION est vide s'exécutant localement sur Mac

Nov 18 2020

Je sais qu'il y a d'autres questions similaires ici, mais aucune d'elles n'a résolu mon problème.

Le problème: je mets des données dans $ _SESSION, mais dans les appels à venir, elles apparaissent comme vides.

Qu'est-ce que j'ai fait pour essayer de le résoudre?

  1. Assurez-vous d'exécuter une version à jour de PHP
  2. Assurez-vous de savoir quel php.ini est utilisé
  3. État du journal de $ _SESSION avant et après sa définition
  4. Définissez diverses variables comme suggéré dans d'autres questions et forums

Ci-dessous, je fournis toutes les informations que je pourrais fournir, et en espérant que quelqu'un pourra suggérer une solution!


J'ai installé PHP sur mon Mac en utilisant brew install php

Je l'exécute localement pour le développement de logiciels à l'aide de cette commande:

php -S localhost:8099 -d display_errors=on -t .
[Tue Nov 17 23:12:55 2020] PHP 7.4.11 Development Server (http://localhost:8099) started

J'appelle session_start();au début de mon script. Je mets des valeurs dans $ _SESSION, mais il est toujours vide lorsque je le teste dans les appels suivants:

$ses = json_encode($_SESSION); site_log("before: {$ses}");

session_regenerate_id();
$_SESSION["upath"] = 'XXXXXX'; $ses = json_encode($_SESSION); site_log("after: {$ses}");

Le résultat est toujours le même (alors que je m'attends à le voir au premier appel mais pas pour les appels suivants):

20201118_040124_484 before: []
20201118_040124_485 after: {"upath":"XXXXXX"}

J'essayais de suivre de nombreuses idées issues de forums Web:

Vérifiez quel est le fichier INI:

php -i | grep 'Configuration File'
>Configuration File (php.ini) Path => /usr/local/etc/php/7.4
>Loaded Configuration File => /usr/local/etc/php/7.4/php.ini

Je définissais diverses variables de fichier INI:

session.save_path = "/Users/myuser/Prog/MyApp/sessions"
+
chmod 777 /Users/myuser/Prog/MyApp/sessions
+
session.use_cookies = 1
+
session.cookie_secure = 0

Mais le résultat est toujours le même. Une idée s'il vous plaît?

Le lien suivant pointe vers le résultat de l'appel de phpinfo (): lien

Réponses

1 ishahak Nov 18 2020 at 22:46

Alors j'ai finalement trouvé une solution.

Il est basé sur les informations fournies ici: Le cookie de session n'est pas défini

Comme @deceze commentait correctement ma question, les premières étapes pour déboguer ce problème sont les suivantes:

  1. Vérifiez si les fichiers de session sont créés dans le dossier save_path (dans mon cas: oui)
  2. Utilisez les outils de développement du navigateur pour voir si des cookies sont définis pour le site (dans mon cas: non)

Le problème réel est donc: pourquoi les cookies ne sont pas définis?

La solution:

  1. Ajoutez une entrée à l'alias 127.0.0.1 en tant que nom «point com». C'est ce que j'ai fait:
# pour Mac! voir la réponse liée pour d'autres plates-formes

sudo vi / private / etc / hosts 

# ajoutez cette ligne:
127.0.0.1 mylocal.com
  1. Activez le serveur php local pour ce domaine (à partir du dossier racine du site):
php -S mylocal.com:8099 -d erreurs_affichage = sur -t.
  1. Chargez le site depuis le serveur php. J'utilise Brackets et j'ai dû ouvrir le menu: Fichier -> Paramètres du projet et définir l'URL de base de l'aperçu en direct sur:
http://mylocal.com:8099/
  1. Certaines variables du fichier INI devront peut-être également être définies, comme déjà détaillé dans la question ci-dessus

En espérant que cette information aidera les autres!