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.
Lo he experimentado una vez también. Es horrible si no esperas un comportamiento tan extraño. – Gumbo
@Foo gracias, hermano! Has guardado mis 5 horas. Muchas gracias. –
Acabo de iniciar sesión en +1 tanto su pregunta y respuesta. Me estaba volviendo loco. –