Foros del Web » Programando para Internet » PHP »

Pierdo valor de SESION al redireccionar con header(location)

Estas en el tema de Pierdo valor de SESION al redireccionar con header(location) en el foro de PHP en Foros del Web. Saludos! Tengo un problema raro, y por alguna razón no puedo dar con él. Ocurre que estoy llenando una variable de tipo array con mensajes ...
  #1 (permalink)  
Antiguo 30/08/2009, 16:28
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Pregunta Pierdo valor de SESION al redireccionar con header(location)

Saludos!

Tengo un problema raro, y por alguna razón no puedo dar con él. Ocurre que estoy llenando una variable de tipo array con mensajes de errores, que después paso a una variable de sesión, para poder mostrarlos después que direccione la página, pero por alguna razón cuando carga la página de nuevo por redirección, la variable de sesion viene vacía... no sé que hacer, lo he depurado de mil formas, pero nada cambia.

El código es el siguiente:

Código PHP:
<?php

session_start
();

$a_mensajes = array();
if (   isset(
$_SESSION["a_mensajes"])  ) { $a_mensajes $_SESSION["a_mensajes"]; }

//echo gettype($a_mensajes);
//echo gettype($_SESSION["a_mensajes"]);

// Pruebo redireccion
if ( !($_GET["redir"]) ) {
    
$a_mensajes[] = "Redirecciono y muestro error";
    
redirecciona("?redir=true");
}


/* Redirecciona usando el HEADER */
function redirecciona($args "") {

    global 
$a_mensajes;

    
$url $_SERVER['PHP_SELF'];
    if ( 
strlen($args) > ) { $url $url $args;    }
    
    
/* Antes de redireccionar, veo si hay errores. 
    Si hay, los mando a la sesión para que se muestren en el cuadro de errores 
    */
    
if ( isset($a_mensajes) && count($a_mensajes) > ) {
        if ( !(isset(
$_SESSION["a_mensajes"])) ) { $_SESSION["a_mensajes"] = array(); }
        
$_SESSION["a_mensajes"] = $a_mensajes;
    } else {
        
//$a_mensajes[] = "No llegaron los mensajes.";
        //$_SESSION["a_mensajes"] = $a_mensajes;
        
header("Location: " $url);
    }
}

function 
muestraMensajes($a_mensajes) {

    echo 
'<strong> Han ocurrido algunos problemas con la acci&oacute;n realizada recientemente. Esta es una lista con los mensajes de error encontrados:</strong>' "\n" '<ul>' "\n";
    foreach(
$a_mensajes as $msg) {
        echo 
'<li>' $msg '</li>' "\n";
    }
    echo 
'</ul>' "\n";
    if ( isset(
$_SESSION["a_mensajes"]) ) { unset($_SESSION["a_mensajes"]); }
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<?php      
    
// Verifico que no vengan mensajes de antes.

/*
    echo "<p>session : ";
    var_dump($_SESSION["a_mensajes"]);
    echo "</p>";
    echo "<p>array : ";
    var_dump($a_mensajes);
    echo "</p>";
*/
    
if ( !(empty($a_mensajes)) ) { 
        
//var_dump($a_mensajes);
?>
        <table width="100%" border="0" cellpadding="5", cellspacing="0">
          <tr>
            <td><?php muestraMensajes ($a_mensajes); ?></td>
          </tr>
         </table>
<?php
    
//else { echo "<p>Nunca pasé por ahí.</p>"; }
    // Fin Pequeña línea 
?>

<p><a href="sesion.php">Refrescar</a></p>

<body>
</body>
</html>
Esto me tiene vuelto loco! llevo como 1 semana tratando de ver qué es lo malo, y no he encontrado ningun "bug" en internet que me diga que esto no funciona...

Alguna ayuda? :

Gracias!
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
  #2 (permalink)  
Antiguo 30/08/2009, 16:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pierdo valor de SESION al redireccionar con header(location)

Si tienes desactivado el uso de cookies, necesitas pasar manualemente el identificador de la sesión usando la constante SID, por ejemplo:
Código PHP:
Ver original
  1. header("Location: pagina.php?" . SID);

Saludos.
  #3 (permalink)  
Antiguo 30/08/2009, 18:34
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Respuesta: Pierdo valor de SESION al redireccionar con header(location)

Tengo session.use_cookies = 1 en php.ini (estoy usando appserv), y en el sitio donde estoy implementando el código que puse arriba, ya estoy usando variables de sesión. El problema es que cuando trato de pasar ese "array", por alguna razón no llega...

Puedes probar el código que adjunté, te recomiendo comentar la línea del "header" para que veas los "var_dump" de los arreglos, y comprobar que sí tienen datos...

Gracias por la ayuda.
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
  #4 (permalink)  
Antiguo 30/08/2009, 19:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Pierdo valor de SESION al redireccionar con header(location)

Pues a mi me sirve correctamente, revisa bien tu configuración de tu php.ini y revisa tus cookies para asegurarte que la cookie con el valor de la sesión esta guardada.

Saludos.
  #5 (permalink)  
Antiguo 31/08/2009, 20:45
 
Fecha de Ingreso: abril-2003
Ubicación: Santiago de Chile
Mensajes: 115
Antigüedad: 21 años
Puntos: 0
Respuesta: Pierdo valor de SESION al redireccionar con header(location)

Finalmente dí con el problema!

Ocurre que si no pongo un "exit" después del "header()", se sigue ejecutando el código de la página, y como mas abajo muestro el error y destruyo la variable de session, al redireccionar llegaba sin nada!

Muy agradecido, espero que mi experiencia le sirva a otros :)
__________________
~[ The Hard ]~
- Sólo sé que nada sé...
- Hay un placer en la locura, que sólo los locos conocen...
- ¿Trabajas para vivir, o vives para trabajar?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:47.