Pregunta

Así que estoy haciendo algo de mantenimiento en un sitio PHP que usa variables $ _SESSION . Empecé a ver un comportamiento muy muy extraño y después de horas de depuración me di cuenta de esto. Como ejemplo, supongamos que tengo una configuración de variable de sesión como esta:

Así que estoy haciendo algo de mantenimiento en un sitio PHP que usa variables $ _SESSION . Empecé a ver un comportamiento muy muy extraño y después de horas de depuración me di cuenta de esto. Como ejemplo, supongamos que tengo una configuración de variable de sesión como esta:

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

En un punto de un script, se realiza una llamada a una tabla MySQL utilizando algunas clases de Zend:

<*>

Ahora aquí es donde comienza la rareza ... Después de hacer esta llamada a la base de datos, mi valor de matriz $ _SESSION ['user'] cambia de repente para ser el objeto que se recupera de la llamada a la base de datos ...

Básicamente: $ _SESSION ['user'] ahora es el mismo que el objeto que se recuperó utilizando el método fetchRow DB que se suponía que debía almacenarse en la variable $ user . Nunca he visto esto antes.

Lo único que puedo entender es porque el nombre de la variable $ user es el mismo que el nombre de la clave de matriz $ _SESSION ['user'] , que actúa como como un atajo o algo así.

¿Se trata de algún tipo de acceso directo de sesión PHP extraño del que nunca he oído hablar?

En una nota al margen, sé que acceder a $ _SESSION directamente no es la mejor práctica. No construí este sitio web. Mi trabajo es solo arreglar algunas cosas y agregar algunas características.

ACTUALIZACIÓN: Efectivamente, register_globals está activado. Gracias por la ayuda rápida chicos. No es de extrañar que estuviera viendo un comportamiento tan extraño.

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

Así que estoy haciendo algo de mantenimiento en un sitio PHP que usa variables $ _SESSION . Empecé a ver un comportamiento muy muy extraño y después de horas de depuración me di cuenta de esto. Como ejemplo, supongamos que tengo una configuración de variable de sesión como esta:

<*>

En un punto de un script, se realiza una llamada a una tabla MySQL utilizando algunas clases de Zend:

<*>

Ahora aquí es donde comienza la rareza ... Después de hacer esta llamada a la base de datos, mi valor de matriz $ _SESSION ['user'] cambia de repente para ser el objeto que se recupera de la llamada a la base de datos ...

Básicamente: $ _SESSION ['user'] ahora es el mismo que el objeto que se recuperó utilizando el método fetchRow DB que se suponía que debía almacenarse en la variable $ user . Nunca he visto esto antes.

Lo único que puedo entender es porque el nombre de la variable $ user es el mismo que el nombre de la clave de matriz $ _SESSION ['user'] , que actúa como como un atajo o algo así.

¿Se trata de algún tipo de acceso directo de sesión PHP extraño del que nunca he oído hablar?

En una nota al margen, sé que acceder a $ _SESSION directamente no es la mejor práctica. No construí este sitio web. Mi trabajo es solo arreglar algunas cosas y agregar algunas características.

ACTUALIZACIÓN: Efectivamente, register_globals está activado. Gracias por la ayuda rápida chicos. No es de extrañar que estuviera viendo un comportamiento tan extraño.

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

Así que estoy haciendo algo de mantenimiento en un sitio PHP que usa variables $ _SESSION . Empecé a ver un comportamiento muy muy extraño y después de horas de depuración me di cuenta de esto. Como ejemplo, supongamos que tengo una configuración de variable de sesión como esta:

<*>

En un punto de un script, se realiza una llamada a una tabla MySQL utilizando algunas clases de Zend:

<*>

Ahora aquí es donde comienza la rareza ... Después de hacer esta llamada a la base de datos, mi valor de matriz $ _SESSION ['user'] cambia de repente para ser el objeto que se recupera de la llamada a la base de datos ...

Básicamente: $ _SESSION ['user'] ahora es el mismo que el objeto que se recuperó utilizando el método fetchRow DB que se suponía que debía almacenarse en la variable $ user . Nunca he visto esto antes.

Lo único que puedo entender es porque el nombre de la variable $ user es el mismo que el nombre de la clave de matriz $ _SESSION ['user'] , que actúa como como un atajo o algo así.

¿Se trata de algún tipo de acceso directo de sesión PHP extraño del que nunca he oído hablar?

En una nota al margen, sé que acceder a $ _SESSION directamente no es la mejor práctica. No construí este sitio web. Mi trabajo es solo arreglar algunas cosas y agregar algunas características.

ACTUALIZACIÓN: Efectivamente, register_globals está activado. Gracias por la ayuda rápida chicos. No es de extrañar que estuviera viendo un comportamiento tan extraño.

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

En un punto de un script, se realiza una llamada a una tabla MySQL utilizando algunas clases de Zend:

<*>

Ahora aquí es donde comienza la rareza ... Después de hacer esta llamada a la base de datos, mi valor de matriz $ _SESSION ['user'] cambia de repente para ser el objeto que se recupera de la llamada a la base de datos ...

Básicamente: $ _SESSION ['user'] ahora es el mismo que el objeto que se recuperó utilizando el método fetchRow DB que se suponía que debía almacenarse en la variable $ user . Nunca he visto esto antes.

Lo único que puedo entender es porque el nombre de la variable $ user es el mismo que el nombre de la clave de matriz $ _SESSION ['user'] , que actúa como como un atajo o algo así.

¿Se trata de algún tipo de acceso directo de sesión PHP extraño del que nunca he oído hablar?

En una nota al margen, sé que acceder a $ _SESSION directamente no es la mejor práctica. No construí este sitio web. Mi trabajo es solo arreglar algunas cosas y agregar algunas características.

ACTUALIZACIÓN: Efectivamente, register_globals está activado. Gracias por la ayuda rápida chicos. No es de extrañar que estuviera viendo un comportamiento tan extraño.

¿Fue útil?

Solución

Parece que tiene register_globals configurado en On en PHP.ini. Desactivarlo debería solucionar esto.

Si no tiene acceso para cambiar PHP.ini, se discute una solución alternativa aquí

Otros consejos

Compruebe si registre globals está activado. Acceder a $ _SESSION es la única forma de acceder a los datos de la sesión de forma segura .

Registrar globals es una característica antigua que convirtió las variables globales en variables locales. El problema con eso era que no podía saber con seguridad de dónde provenían los datos. Algo que esperaba de una sesión podría establecerse con una variable get, post o cookie. Por lo tanto, fue muy fácil eludir la seguridad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top