Domanda

Quindi sto facendo un po 'di manutenzione su un sito PHP che sta usando le variabili $ _SESSION . Ho iniziato a vedere un comportamento molto strano e dopo ore di debug ho appena capito. Ad esempio, supponiamo di avere un'impostazione della variabile di sessione come questa:

Quindi sto facendo un po 'di manutenzione su un sito PHP che sta usando le variabili $ _SESSION . Ho iniziato a vedere un comportamento molto strano e dopo ore di debug ho appena capito. Ad esempio, supponiamo di avere un'impostazione della variabile di sessione come questa:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

Ad un certo punto di uno script, viene effettuata una chiamata a una tabella MySQL usando alcune classi Zend:

<*>

Ora qui è dove inizia la stranezza ... Dopo aver fatto questa chiamata al database, il mio valore di array $ _SESSION ['user'] viene improvvisamente cambiato per essere l'oggetto che viene recuperato dalla chiamata del database ...

Fondamentalmente: $ _SESSION ['user'] ora è uguale all'oggetto che è stato recuperato usando il metodo DB fetchRow che doveva essere memorizzato nella variabile $ user . Non l'ho mai visto prima.

L'unica cosa che riesco a capire è perché il nome della variabile $ user è uguale al nome della chiave dell'array $ _SESSION ['user'] , che agisce come come una scorciatoia o qualcosa del genere.

È una sorta di strane scorciatoie per le sessioni PHP di cui non ho mai sentito parlare prima?

In una nota a margine, so che accedere direttamente a $ _SESSION non è la migliore pratica. Non ho creato questo sito web. Il mio compito è solo quello di riparare alcune cose e aggiungere alcune funzionalità.

AGGIORNAMENTO: Sicuramente, register_globals è attivo. Grazie per l'aiuto rapido ragazzi. Nessuna meraviglia che stavo vedendo un comportamento così strano.

SESSION['user']['id'] = 123;

Quindi sto facendo un po 'di manutenzione su un sito PHP che sta usando le variabili $ _SESSION . Ho iniziato a vedere un comportamento molto strano e dopo ore di debug ho appena capito. Ad esempio, supponiamo di avere un'impostazione della variabile di sessione come questa:

<*>

Ad un certo punto di uno script, viene effettuata una chiamata a una tabella MySQL usando alcune classi Zend:

<*>

Ora qui è dove inizia la stranezza ... Dopo aver fatto questa chiamata al database, il mio valore di array $ _SESSION ['user'] viene improvvisamente cambiato per essere l'oggetto che viene recuperato dalla chiamata del database ...

Fondamentalmente: $ _SESSION ['user'] ora è uguale all'oggetto che è stato recuperato usando il metodo DB fetchRow che doveva essere memorizzato nella variabile $ user . Non l'ho mai visto prima.

L'unica cosa che riesco a capire è perché il nome della variabile $ user è uguale al nome della chiave dell'array $ _SESSION ['user'] , che agisce come come una scorciatoia o qualcosa del genere.

È una sorta di strane scorciatoie per le sessioni PHP di cui non ho mai sentito parlare prima?

In una nota a margine, so che accedere direttamente a $ _SESSION non è la migliore pratica. Non ho creato questo sito web. Il mio compito è solo quello di riparare alcune cose e aggiungere alcune funzionalità.

AGGIORNAMENTO: Sicuramente, register_globals è attivo. Grazie per l'aiuto rapido ragazzi. Nessuna meraviglia che stavo vedendo un comportamento così strano.

SESSION['user']['firstname'] = 'John';

Quindi sto facendo un po 'di manutenzione su un sito PHP che sta usando le variabili $ _SESSION . Ho iniziato a vedere un comportamento molto strano e dopo ore di debug ho appena capito. Ad esempio, supponiamo di avere un'impostazione della variabile di sessione come questa:

<*>

Ad un certo punto di uno script, viene effettuata una chiamata a una tabella MySQL usando alcune classi Zend:

<*>

Ora qui è dove inizia la stranezza ... Dopo aver fatto questa chiamata al database, il mio valore di array $ _SESSION ['user'] viene improvvisamente cambiato per essere l'oggetto che viene recuperato dalla chiamata del database ...

Fondamentalmente: $ _SESSION ['user'] ora è uguale all'oggetto che è stato recuperato usando il metodo DB fetchRow che doveva essere memorizzato nella variabile $ user . Non l'ho mai visto prima.

L'unica cosa che riesco a capire è perché il nome della variabile $ user è uguale al nome della chiave dell'array $ _SESSION ['user'] , che agisce come come una scorciatoia o qualcosa del genere.

È una sorta di strane scorciatoie per le sessioni PHP di cui non ho mai sentito parlare prima?

In una nota a margine, so che accedere direttamente a $ _SESSION non è la migliore pratica. Non ho creato questo sito web. Il mio compito è solo quello di riparare alcune cose e aggiungere alcune funzionalità.

AGGIORNAMENTO: Sicuramente, register_globals è attivo. Grazie per l'aiuto rapido ragazzi. Nessuna meraviglia che stavo vedendo un comportamento così strano.

SESSION['user']['lastname'] = 'Doe';

Ad un certo punto di uno script, viene effettuata una chiamata a una tabella MySQL usando alcune classi Zend:

<*>

Ora qui è dove inizia la stranezza ... Dopo aver fatto questa chiamata al database, il mio valore di array $ _SESSION ['user'] viene improvvisamente cambiato per essere l'oggetto che viene recuperato dalla chiamata del database ...

Fondamentalmente: $ _SESSION ['user'] ora è uguale all'oggetto che è stato recuperato usando il metodo DB fetchRow che doveva essere memorizzato nella variabile $ user . Non l'ho mai visto prima.

L'unica cosa che riesco a capire è perché il nome della variabile $ user è uguale al nome della chiave dell'array $ _SESSION ['user'] , che agisce come come una scorciatoia o qualcosa del genere.

È una sorta di strane scorciatoie per le sessioni PHP di cui non ho mai sentito parlare prima?

In una nota a margine, so che accedere direttamente a $ _SESSION non è la migliore pratica. Non ho creato questo sito web. Il mio compito è solo quello di riparare alcune cose e aggiungere alcune funzionalità.

AGGIORNAMENTO: Sicuramente, register_globals è attivo. Grazie per l'aiuto rapido ragazzi. Nessuna meraviglia che stavo vedendo un comportamento così strano.

È stato utile?

Soluzione

Sembra che tu abbia register_globals impostato su On in PHP.ini. Disattivarlo dovrebbe risolvere questo problema.

Se non si ha accesso alla modifica di PHP.ini, viene discussa una soluzione alternativa qui

Altri suggerimenti

Controlla se registrati globali è attivato. L'accesso a $ _SESSION è l'unico modo per accedere ai dati della sessione in modo sicuro .

Register globals è una vecchia funzionalità che ha trasformato le variabili globali in variabili locali. Il problema era che non si poteva sapere con sicurezza da dove provenissero i dati. Qualcosa che ti aspettavi da una sessione potrebbe essere impostato con una variabile get, post o cookie. Quindi è stato molto facile aggirare la sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top