Sessioni PHP: $ _SESSION è vuoto in esecuzione localmente su Mac

Nov 18 2020

So che ci sono altre domande simili qui, ma nessuna di queste ha risolto il mio problema.

Il problema: sto impostando i dati in $ _SESSION, ma nelle prossime chiamate appare vuoto.

Cosa ho fatto per provare a risolverlo?

  1. Assicurati di eseguire una versione aggiornata di PHP
  2. Assicurati di sapere quale php.ini viene utilizzato
  3. Registra lo stato di $ _SESSION prima e dopo l'impostazione
  4. Imposta varie variabili come suggerito in altre domande e forum

Di seguito fornisco tutte le informazioni che potrei fornire, sperando che qualcuno possa suggerire una soluzione!


Ho installato PHP sul mio Mac usando brew install php

Lo sto eseguendo localmente per lo sviluppo di software usando questo comando:

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

Chiamo session_start();all'inizio del mio copione. Sto impostando i valori in $ _SESSION, ma è sempre vuoto quando lo provo nelle seguenti chiamate:

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

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

Il risultato è sempre lo stesso (mentre mi aspetto di vederlo alla prima chiamata ma non per le chiamate successive):

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

Stavo cercando di seguire molte idee dai forum web:

Verifica qual è il file 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

Stavo impostando varie variabili di file INI:

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

Ma il risultato è sempre lo stesso. Qualche idea per favore?

Il collegamento seguente punta al risultato della chiamata a phpinfo (): link

Risposte

1 ishahak Nov 18 2020 at 22:46

Così finalmente ho trovato una soluzione.

Si basa sulle informazioni fornite qui: Cookie di sessione non impostato

Dato che @deceze stava commentando correttamente la mia domanda, i primi passi per eseguire il debug di tale problema sono questi:

  1. Controlla se i file di sessione vengono creati nella cartella save_path (nel mio caso: sì)
  2. Usa gli strumenti di sviluppo del browser per vedere se i cookie sono impostati per il sito (nel mio caso: no)

Quindi il vero problema è: perché i cookie non vengono impostati?

La soluzione:

  1. Aggiungi una voce all'alias 127.0.0.1 come nome "punto com". Questo è quello che ho fatto:
# per Mac! vedi risposta collegata per altre piattaforme

sudo vi / private / etc / hosts 

# aggiungi questa riga:
127.0.0.1 mylocal.com
  1. Attiva il server php locale per questo dominio (dalla cartella principale del sito):
php -S mylocal.com:8099 -d display_errors = on -t.
  1. Carica il sito dal server php. Sto usando Brackets e ho dovuto aprire il menu: File -> Impostazioni progetto e impostare l'URL di base dell'anteprima dal vivo come:
http://mylocal.com:8099/
  1. Potrebbe essere necessario impostare anche alcune variabili nel file INI, come già spiegato nella domanda precedente

Spero che queste informazioni possano aiutare gli altri!