Sesión PHP perdida después de la redirección
¿Cómo resuelvo el problema de perder una sesión después de una redirección en PHP?
Recientemente, encontré un problema muy común al perder la sesión después de la redirección. Y después de buscar en este sitio web todavía no encuentro la solución (aunque esta fue la más cercana).
Actualizar
Encontré la respuesta y pensé en publicarla aquí para ayudar a cualquiera que experimente el mismo problema.
En primer lugar, realice estas comprobaciones habituales:
- Asegúrese de
session_start();
que lo llamen antes de convocar cualquier sesión. Por lo tanto, una apuesta segura sería colocarlo al principio de su página, inmediatamente después de la<?php
declaración inicial, antes que nada. También asegúrese de que no haya espacios en blanco ni tabulaciones antes de la<?php
declaración de apertura. - Después de la
header
redirección, finalice el script actual usandoexit();
(Otros también han sugeridosession_write_close();
ysession_regenerate_id(true)
, también puede probarlos, pero yo usaríaexit();
) - Asegúrese de que las cookies estén habilitadas en el navegador que está utilizando para probarlo.
- Asegúrese de que
register_globals
esté desactivado, puede verificar esto en elphp.ini
archivo y también usandophpinfo()
. Consulte esto para saber cómo apagarlo. - Asegúrate de no haber eliminado ni vaciado la sesión.
- Asegúrese de que la clave en su
$_SESSION
matriz superglobal no se sobrescriba en ninguna parte - Asegúrate de redirigir al mismo dominio. Entonces, redirigir de a
www.yourdomain.com
ayourdomain.com
no continúa la sesión. - Asegúrese de que la extensión de su archivo sea
.php
(¡sucede!)
Ahora bien, estos son los errores más comunes, pero si no funcionaron, lo más probable es que el problema tenga que ver con su empresa de hosting. Si todo funciona en localhost
su servidor remoto/de prueba, pero no en él, lo más probable es que este sea el culpable. Así que consulte la base de conocimientos de su proveedor de alojamiento (pruebe también sus foros, etc.). Para empresas como FatCow e iPage, requieren que especifiques session_save_path
. Entonces así:
session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();
(reemplace "la ruta de su directorio de inicio" con la ruta de su directorio de inicio real. Esto generalmente se encuentra dentro de su panel de control (o equivalente), pero también puede crear un test.php
archivo en su directorio raíz y escribir:
<?php echo $_SERVER['SCRIPT_FILENAME']; ?>
El bit antes de 'test.php' es la ruta de su directorio de inicio. Y, por supuesto, asegúrese de que la carpeta realmente exista dentro de su directorio raíz. (Algunos programas no cargan carpetas vacías al sincronizar)
deberías usar "salir" después de la llamada al encabezado
header('Location: http://www.example.com/?blabla=blubb');
exit;
Probé todas las soluciones posibles, ¡pero ninguna funcionó para mí! Por supuesto, estoy usando un servicio de alojamiento compartido.
Al final, solucioné el problema usando una 'URL relativa' dentro del encabezado de redireccionamiento.
header("location: http://example.com/index.php")
anuló las cookies de sesión
header("location: index.php")
trabajado como un encanto !
Yo tuve el mismo problema. Trabajé en ello durante varias horas y me volvió loco.
En mi caso, el problema fue una llamada 404 debido a que faltaba un favicon.ico solo en Chrome y Firefox. Los otros navegantes trabajaron bien.
Estaba teniendo el mismo problema. De repente, ALGUNAS de las variables de mi sesión no persistían en la página siguiente. El problema resultó ser (en php7.1) la ubicación del encabezado no debe tener WWW, por ejemplo, https://mysite . está bien, https://www.mysite . perderá las variables de sesión de esas páginas. No todos, solo esa página.