2008-10-06 12 views
42

Estoy tratando de alojar un sitio web PHP que me fue entregado. Veo esta advertencia:Advertencia de efecto secundario de la sesión PHP con variables globales como fuente de datos

Advertencia: Desconocido: La secuencia de comandos posiblemente se basa en una sesión de efectos secundarios, que existió hasta PHP 4.2.3. Tenga en cuenta que informó que la extensión de sesión no considera variables globales como una fuente de datos, a menos que register_globals esté habilitado. Puede desactivar esta funcionalidad y esta advertencia configurando session.bug_compat_42 o session.bug_compat_warn en off, respectivamente. en Desconocido en la línea

¿Qué significa esto? ¿Cómo puedo rastrear el origen de este problema dentro del código?

Respuesta

98

básicamente tiene una variable con el mismo nombre que su sesión. ex:

$_SESSION['var1'] = null; 
$var1 = 'something'; 

que reproducirá este error. PHP se puede parar de tratar de encontrar las variables existentes y que le advierte sobre ellos mediante la adición de estas líneas a la secuencia de comandos:

ini_set('session.bug_compat_warn', 0); 
ini_set('session.bug_compat_42', 0); 

estos valores se pueden establecer en php.ini o .htaccess así

+0

funciona como un encanto! ¡Pulgares hacia arriba! – Anunay

+2

Para las personas que no son tan buenas modificando los archivos php.ini, el formato anterior no es el que usa. Debería ser "session.bug_compat_42 = 0" en una línea y "session.bug_compat_warn = 0" en otra (sin comillas). Sin embargo, primero haga una búsqueda en su archivo php.ini. Es probable que ambos ya se hayan definido como 1 y solo tienes que cambiar a 0 – rgbflawed

6

Parece siendo algunas posibilidades problemáticas aquí:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

dice que casos como este:

$_SESSION['firstname']=$_REQUEST['firstname']; 

activará la advertencia.

Además, interpreto este contenido de error de php: http://bugs.php.net/bug.php?id=41540 para indicar que este error también puede ocurrir cuando se asigna una variable a la sesión superglobal que aún no se ha inicializado, p.

//Start of script 
$_SESSION['bob'] = $bob; 
2

Cuando realiza cambios en .htaccess ini_set no funciona. Tendrá que hacerlo como:

php_flag session.bug_compat_42 0 
php_flag session.bug_compat_warn 0 
5

Esta es una buena información sobre cómo encontrar qué está causando la advertencia, pero recomendaría NO apagar las advertencias Owen menciona. Estas funciones de tiempo de ejecución son removed in PHP 5.4.0 y el desarrollador debe adoptar la práctica de evitar dicho uso de variables.

Para solucionar este problema, puede ser un dolor en el extremo desarrolladores, pero si usted tiene

$_SESSION["user"] 
$user; 

cambiar el nombre de la sesión para

$_SESSION["sessuser"]; 

O viceversa con tal de que la sesión nombre y el nombre de la variable son diferentes.Piénselo de esta manera: cuando actualice a la última compilación, tendrá que depurar su código de todos modos.

1

en mi caso, el cambio php.ini de encendido a apagado

así:

session.bug_compat_42 = off 
session.bug_compat_warn = off 

si no funciona, reinicie Apache

Cuestiones relacionadas