2011-07-05 28 views
5

Trong một chương trình PHP có thể chuyển hướng tiêu đề() được tính vào để kết thúc luồng chương trình, hoặc có giá trị trong, ví dụ, sau chúng với một die() để được an toàn? Có thể cho người dùng khai thác kịch bản bằng cách nào đó gửi đi các chuyển hướng không? Câu hỏi này rất quan trọng trong trường hợp người dùng được chuyển hướng vì không có đủ quyền truy cập và mã sau đây chỉ dành cho những người không được chuyển hướng.Có thể tính toán chuyển hướng tiêu đề() để kết thúc luồng chương trình không?

+0

Bạn nên sử dụng exit() hoặc chết sau tiêu đề –

+0

Để có danh sách các tiêu đề hiện đã được đặt, hãy xem ['headers_list()'] (http://php.net/manual/en/function.headers -list.php) – hakre

Trả lời

7

Không, tiêu đề không kết thúc thực hiện chương trình. Bạn phải tự kết thúc bằng lối ra hoặc chết. Bạn có thể thử này mình với một cái gì đó như thế này:

<?php 
file_put_contents('/tmp/test', '1'); 
header('Location: http://www.emilvikstrom.se/'); 
file_put_contents('/tmp/test', '2'); 
?> 

Kiểm tra nội dung của /tmp/test và bạn sẽ thấy rằng nó là 2.

Tôi cũng đã thử kịch bản này:

<?php 
header('Location: http://www.emilvikstrom.se/'); 
echo "Test\n"; 
?> 

cùng với telnet để gửi một yêu cầu HTTP dẫn sử dụng, với kết quả này:

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 

Như bạn thấy, tất cả mọi thứ được lặp lại sau Tiêu đề vị trí vẫn được gửi đến trình duyệt. Trên thực tế, PHP không thể biết sau cuộc gọi header nếu bạn định gửi nhiều tiêu đề hơn hoặc nếu những thứ bạn phản hồi có tầm quan trọng.

Các vấn đề liên quan