Nov
29
Por que detener la ejecución de un script despues de redireccionar mediante headers
Bueno, la respuesta la acabo de conocer, y creo que al igual que la mayoría cargué con esta duda durante bastante tiempo
Cuando enviamos un header de la siguiente forma:
Lo que estamos haciendo es un redireccionamiento del usuario a la direccion_destino, pero esto no garantiza que el usuario llegue a su destino, ya que en el servidor no detiene la ejecución del script y continua la lectura línea a línea, y si por alguna razón existiera otro header("location: direccion_destino_dos"), este enviará a la direccion_destino_dos causando un error lógico.
Las siguientes líneas de código envían al usuario a direccion_destino_tres.
... funcionó!
header("location: direccion_destino");
header("location: direccion_destino_uno");
header("location: direccion_destino_dos");
header("location: direccion_destino_tres");
Y la solución pues es más que obvia, solo agregar un exit() o un die() despues de el envío del usuario y todo quedará solucionado.
header("location: direccion_destino_uno");die();
header("location: direccion2");
header("location: direccion3");
La solución a todo este rollo la he encontrado en thescripts - developer community, y de puuura casualidad :D.
Seguido de eso, hice las pruebas y voala!!...Problem 5: Just because you send a Location header does not mean the script stops here. You'll carry on to the next bit, and possibly send more Location headers. If you want to send the header then stop, use exit()....
5 Comments
Make A CommentComments RSS Feed TrackBack URL




December 4th, 2006 at 6:33 pm
Es muy importante! sobre todo en páginas que requieren comprobar la sesión, de forma que usuarios no loggeados no puedan ejecutar acciones para las que no tienen permisos.
Es decir, en un caso así no bastaría con comprobar una sesión y redirigir a través del header. Haría falta además ponerle un exit() detrás, para no seguir ejecutando el código. Si no, alguien que conozca la URL de una acción puede ejecutarla aunque no llegue a ver realmente la página que la hace.
December 4th, 2006 at 7:33 pm
Si, precisamente es eso, la acción se ejecutará aunque no se visualizae el resultado.
December 4th, 2006 at 7:35 pm
Nunca supe la razón de el ¿por que poner exit despues de un header location? peero, siempre lo hice
December 4th, 2006 at 9:15 pm
En realidad el contenido se visualiza, sólo que tu navegador le dá más importancia a la cabecera "Location", pueden probar con netcat o fiddler para ver que está pasando realmente
December 5th, 2006 at 12:41 am
Si, de hecho lo probré con fiddler