En un programa PHP, ¿se pueden contar los redireccionamientos de encabezado() para finalizar el flujo del programa, o existe algún valor en, por ejemplo, seguirlos con un dado() para estar seguros? ¿Es posible para el usuario explotar el script de alguna manera renunciando a los redireccionamientos? Esta pregunta es crucial en un caso en el que el usuario es redirigido por no tener suficientes permisos de acceso y el siguiente código está destinado solo para aquellos que no fueron redireccionados.¿Se pueden contar los redireccionamientos del encabezado() para finalizar el flujo del programa?
5
A
Respuesta
7
No, encabezado no finaliza la ejecución del programa. Debe terminarlo usted mismo con la salida o morir. Puede probar esto con algo como esto:
<?php
file_put_contents('/tmp/test', '1');
header('Location: http://www.emilvikstrom.se/');
file_put_contents('/tmp/test', '2');
?>
Comprobar el contenido de /tmp/test
y usted encontrará que es 2
.
También he intentado este script:
<?php
header('Location: http://www.emilvikstrom.se/');
echo "Test\n";
?>
junto con telnet para enviar una petición HTTP manual, con este resultado:
HTTP/1.1 302 Found
Server: nginx/0.7.67
Date: Tue, 05 Jul 2011 07:27:14 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.3.3-7+squeeze1
Location: http://www.emilvikstrom.se/
Vary: Accept-Encoding
Content-Length: 5
Test
Como se ve, todo lo que se hace eco después de la El encabezado de ubicación aún se envía al navegador. De hecho, PHP no puede saber después de una llamada header
si va a enviar más encabezados, o si las cosas que emite son importantes.
Cuestiones relacionadas
- 1. ¿Qué método se utiliza para finalizar la ejecución del programa Java en el medio?
- 2. .NET: ¿Para qué se usa el encabezado del objeto?
- 3. ¿Debería uno usar `if ($ a! = NULL)` o `if ($ a! == NULL)` para controlar el flujo del programa?
- 4. ¿Cómo puedo usar Selenium RC para verificar nuestros Redireccionamientos del lado del servidor (301, 302)?
- 5. FastMM4 dice "El encabezado del bloque se ha dañado"
- 6. ¿Cómo se limpia el programa al salir del programa javafx?
- 7. ¿Hay un mecanismo general para finalizar los eventos en node.js?
- 8. ¿cómo se pueden obtener los atributos del elemento raíz?
- 9. Cómo finalizar explícitamente la conexión http del servidor sin encabezado de respuesta
- 10. ¿Cómo podemos contar el tiempo del proceso?
- 11. Los argumentos de tipo para el método no se pueden inferir del uso
- 12. No se pueden inferir los argumentos de tipo para el método System.Linq.Enumerable.OrderBy del uso
- 13. Personalizar la sección del encabezado para UITableViewController
- 14. Ventana del programa depurado no se cerrará
- 15. Imprimir flujo de código fuente cuando se ejecuta el programa
- 16. ¿Captura excepciones como el control de flujo de ejecución del programa esperado?
- 17. Configuración del encabezado HTTP Accept para JsonRestStore
- 18. Cómo finalizar un script PhantomJS solo después de que se han producido redirecciones del lado del cliente
- 19. Agregar un UIButton en el encabezado del encabezado de UITableView
- 20. ¿Son necesarios los archivos .OCA para la ejecución del programa?
- 21. Convertir datos del encabezado del correo electrónico
- 22. ¿Cómo se pueden consumir los servicios web remotos desde un script del lado del cliente?
- 23. No se pueden inferir los argumentos del tipo C# del uso en Seleccionar con retornos múltiples
- 24. configuración del color del encabezado gridview
- 25. ¿Cómo se pueden leer bytes del archivo en Python
- 26. Establecer el encabezado del Referer en asp.net
- 27. Choques simples del programa
- 28. ventana del navegador abierta del programa Java
- 29. Obtener el código de respuesta del encabezado
- 30. Biblioteca para extraer palabras (voz) del flujo de audio?
Debe usar exit() o morir después de su encabezado –
Para obtener una lista de los encabezados que se han configurado actualmente, consulte ['headers_list()'] (http://php.net/manual/en/function.headers -list.php) – hakre