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 :D Cuando enviamos un header de la siguiente forma:
header("location: direccion_destino");
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.
	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.

...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()....

Seguido de eso, hice las pruebas y voala!! :D ... funcionó!

5 Comments

Make A Comment
  • a gravatar Joaquín Said:

    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.

  • a gravatar Victor Said:

    Si, precisamente es eso, la acción se ejecutará aunque no se visualizae el resultado.

  • a gravatar Victor Said:

    Nunca supe la razón de el ¿por que poner exit despues de un header location? peero, siempre lo hice ;-)

  • a gravatar alex Said:

    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

  • a gravatar Victor Said:

    Si, de hecho lo probré con fiddler :D

Comments RSS Feed   TrackBack URL

Leave a comment

top