Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/08/2009, 16:28
TheHard
 
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?