2010-03-19 21 views
5

He intentado depurar este problema durante muchas horas, pero fue en vano. He estado usando PHP durante muchos años, y volví a hacerlo después de un largo paréntesis, así que todavía estoy un poco oxidado.Variable de sesión basada en PHP que no conserva el valor. Funciona en localhost, pero no en el servidor

De todos modos, mis $ _SESSION vars no conservan su valor por alguna razón que no puedo entender. El sitio funcionaba perfectamente en localhost, pero subirlo al servidor parecía romperlo.

Lo primero que verifiqué fue la configuración del servidor PHP.ini. Todo parece estar bien. De hecho, mi sistema de inicio de sesión está basado en sesiones y funciona perfectamente. Así que ahora que sé que $ _SESSIONS están funcionando correctamente y conservando su valor para mi inicio de sesión, supongo que el servidor está configurado y el problema está en mi script.

Aquí hay una versión eliminada del código que está causando un problema. $ type, $ order y $ style no se retienen después de que se configuran a través de una variable GET. El usuario hace clic en un enlace, que establece una variable a través de GET, y esta variable se conserva para el resto de su sesión.

¿Hay algún problema con mi lógica que no estoy viendo?

<?php 
require_once('includes/top.php'); //first line includes a call to session_start(); 
require_once('includes/db.php'); 

$type = filter_input(INPUT_GET, 't', FILTER_VALIDATE_INT); 
$order = filter_input(INPUT_GET, 'o', FILTER_VALIDATE_INT); 
$style = filter_input(INPUT_GET, 's', FILTER_VALIDATE_INT); 

/* 
According to documentation, filter_input returns a NULL when variables 
are undefined. So, if t, o, or s are not set via URL, $type, $order and $style 
will be NULL. 
*/  

print_r($_SESSION); 
/* 
All other sessions, such as the login session, etc. are displayed here. After 
the sessions are set below, they are displayed up here to... simply with no value. 
This leads me to believe the problem is with the code below, perhaps? 
*/ 


// If $type is not null (meaning it WAS set via the get method above) 
// or it's false because the validation failed for some reason, 
// then set the session to the $type. I removed the false check for simplicity. 
// This code is being successfully executed, and the data is being stored... 
if(!is_null($type)) 
{ 
    $_SESSION['type'] = $type; 
} 
if(!is_null($order)) 
{ 
    $_SESSION['order'] = $order; 
} 
if(!is_null($style)) 
{ 
    $_SESSION['style'] = $style; 
} 


$smarty->display($template); 

?> 

Si alguien puede señalarme en la dirección correcta, lo agradecería mucho. Gracias.

Respuesta

7

¡Increíble!

Después de tres horas de depuración, he descubierto el problema

HostGator, que ya no es mi amado anfitrión, corre su defecto ini con register_globals EN

No puedo creer esta.

Entonces mis variables de $ type se sobrescribían con $ _SESSION ['type'] y se las trataba como iguales. Entonces, fue un problema del servidor el que causó el problema, no mi codificación. Es genial saberlo, pero quiero que mis 5 horas de retirar mi cabello hacia atrás.

Espero que esto ayude a alguien en el camino que usa HostGator y se confunde como el infierno.

+0

Lo he experimentado una vez también. Es horrible si no esperas un comportamiento tan extraño. – Gumbo

+0

@Foo gracias, hermano! Has guardado mis 5 horas. Muchas gracias. –

+0

Acabo de iniciar sesión en +1 tanto su pregunta y respuesta. Me estaba volviendo loco. –

1

Debe llamar a la función session_start(). Antes de acceder a la variable $_SESSION.

Entonces Se conservará todas las variables de sesión para que ..

+0

Se llama a session_start() en el primer archivo requerido/incluido, en la parte superior. Otras variables basadas en sesión están funcionando, por lo que la sesión se está creando y comenzando perfectamente. – Foo

0

Creo que usted ha señalado que ha hecho una llamada a session_start() en la derecha top.php? Y otra cosa que noto es que está validando campos enteros a través del filtro PHP. Asegúrese de que sean valores enteros o terminará con valores nulos. Haga una prueba para ver si los valores TYPE, ORDER y STYLE se establecen antes de validar. Tenga en cuenta que usar el filtro php es validar para cierto tipo y no almacenar. No creo que $ type almacene sus datos, sería más bien un cheque booleano. Intente asignar las variables $ _GET [] a las VARIABLES DE SESIÓN. Espero que esto ayude.

+0

Gracias por las sugerencias. Lo probé, se están estableciendo todas las variables. De hecho, el $ _SESSION ['type'] o lo que sea se está configurando con mi código. Simplemente no conserva el valor mientras continúa navegando en el sitio. No hay otro lugar que lo desconecte o sobrescriba. – Foo

Cuestiones relacionadas