Soy un novato completo en las sesiones de php. Los hice funcionar antes, pero nunca en un servidor en vivo, solo en mi entorno de prueba local.

Mi problema es que la variable $ _SESSION siempre es una matriz vacía (no indefinida).

Esto es para un formulario de inicio de sesión que está realizando una llamada AJAX a un archivo php.

Aquí está la llamada AJAX:

$.ajax({
        url: 'xhr/login.php',
        data: $(this).serialize(),
        type: 'post',
        dataType: 'json',
        success: function(result){
            if (result.success){
                console.log(result);
            };
        },
        error: function(e){console.log("Could not retrieve login information")}
    });

Estas son las partes relevantes del script de inicio de sesión:

# Start the user session
if(!isset($_SESSION)) {
    session_start();
    session_regenerate_id();
};

# Set our session values
                WHILE($session_row = mysql_fetch_assoc($session_result)){
                    $_SESSION['id'] = $session_row['id'];
                    $_SESSION['last_login'] = $session_row['last_login'];
                    $_SESSION['username'] = $session_row['username'];
                    $_SESSION['signup_date'] = $session_row['signup_date']; 
                };

Tengo el Json que regresa devolviendo la variable de sesión como:

echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION));

Pero cuando registro la variable result.session en la consola, simplemente devuelve una matriz vacía.

0
StephenRios 7 ene. 2012 a las 21:55
1
¿Por qué se escribe while en mayúscula? ¿Dónde está haciendo esta consulta a la base de datos?
 – 
Charles Sprayberry
7 ene. 2012 a las 22:04
¿Dónde se genera $ session_result? Si no se generan errores, es posible que "$ session_row = mysql_fetch_assoc ($ session_result)" nunca devuelva verdadero, por lo que el ciclo se ignora. Además, como preguntó Charles, debería ser "while", no WHILE.
 – 
Ben D
7 ene. 2012 a las 22:05

1 respuesta

La mejor respuesta

Mi problema es que la variable $ _SESSION siempre es una matriz vacía (no indefinida).

Eso es totalmente normal para cada sesión que se haya iniciado con éxito .

session_regenerate_id();

Ay. Ay. Ay. ¿Por qué regenera la identificación de la nada en cada solicitud?

Quita esa línea. También podría causar su problema.

1
hakre 7 ene. 2012 a las 22:16
Aparentemente cambiando a esto: $session_result = mysql_query($session_sql); $returned_rows = mysql_fetch_assoc($session_result); IF(count($returned_rows) > 0 && count(mysql_fetch_assoc($session_result)) < 2){ de esto: $session_result = mysql_query($session_sql); IF(count(mysql_fetch_assoc($session_result)) != 0 && count(mysql_fetch_assoc($session_result)) < 2){ $returned_row = mysql_fetch_assoc($session_result); fue la clave. ¿No estás seguro de por qué funcionó?
 – 
StephenRios
8 ene. 2012 a las 02:00
Yo tampoco;) ¿Probablemente estás usando un controlador de guardado de sesión propio?
 – 
hakre
8 ene. 2012 a las 02:04