2010-01-10 11 views
14

Tengo un script que establece algunos valores de sesión antes de redireccionar a / usando header().Secuencia de PHP destruida/perdida después del encabezado

He leído muchos mensajes acerca de la variable que está siendo destruido $_SESSION/perdida después header(), incluso después de que he implementado este:

// set session here 

session_regenerate_id(true); 
session_write_close(); 
header("Location: /"); 

session_start() se encuentra en los lugares correctos, ¿alguien sabe de nada de lo que podría estar perdido?

En la página index.php tengo unas pocas cosas:

session_start(); 
print_r($_SESSION); 

// outputs nothing :'(

El código es bastante complejo, así que no va a publicar todo, sólo fragmentos.

Respuesta

3

Con el fin de cerrar esta pregunta, habíamos llegado a la conclusión que era un problema con la configuración del servidor, no es sorprendente teniendo en cuenta el anfitrión está bien conocido por este tipo de cosas.

+1

¿Podría ser más preciso? –

+1

No, desafortunadamente no puedo. El host en ese momento no permitía a los desarrolladores modificar el archivo 'php.ini', pasar a un host diferente donde pudiéramos controlar esto y el problema fue resuelto. –

+1

Para cualquiera que lea esto, creo que podría tener la solución. Es la respuesta aceptada publicada en http://stackoverflow.com/questions/17242346/php-session-lost-after-redirect – dayuloli

11

Nunca he visto ningún problema relacionado con la sesión debido al uso de encabezados de ubicación: ¿está seguro de que está llamando al session_start en ambas páginas?


Hmm ... esta respuesta hizo mucho más sentido antes de agregar los bits Session_Start anterior, y ha mencionado el hecho de que estuvo segura de que estaba utilizando session_start. :-)

+0

Incluso después de eliminar la línea 'session_regenerate_id' persiste el mismo problema. –

+0

Y sí, estoy seguro de que 'session_start()' se está llamando en todos los lugares correctos. –

+0

Si saca la ubicación del encabezado, vuelva a dirigirla y simplemente cambie la URL (en el navegador) ¿están disponibles los datos de la sesión? –

5

cabecera debe ser enviado antes del cierre de la sesión

session_regenerate_id(true); 

header("Location: /"); 
// the header must be sent before session close 
session_write_close(); // here you could also use exit(); 
+0

Intenté esto ... sin alegría. –

+0

Tuve el mismo problema y agregué "exit()" después de que el redireccionamiento lo resolvió –

4

acaba de poner la salida; después de cabecera: D He resuelto por esta

+0

Supongamos que ya he hecho thtat –

4

después de la cabecera redirigir lo que necesita para salir del script PHP:

header("Location: /"); 
exit(); 
+6

Dado que 'exit' es una construcción de lenguaje puede simplemente use 'exit;' (sin paréntesis). Solo un consejo útil para guardar 2 caracteres de código. :-) –

-4

No es necesario para comenzar a session_start() en cada página. hasta que su navegador esté cerrado, la misma sesión permanece para toda la ruta que ha especificado en php.ini

Cuestiones relacionadas