2009-03-03 32 views
6

Tôi đang tạo trang web và trên một trang cụ thể, tôi muốn gửi người dùng trở lại trang trước đó. Tôi khá mới với PHP/HTML và đã sử dụng một số mã hiện có cho các ý tưởng và trợ giúp.php/html - http_referer

Các mã hiện sử dụng các phương pháp sau đây:

if (! empty($HTTP_REFERER)) 
{ 
    header("Location: $HTTP_REFERER"); 
} else 
{ 
    header("Location: $CFG->wwwroot"); 
} 

Tuy nhiên, khi tôi sử dụng mã này HTTP_REFERER luôn đối xử như trống rỗng và người sử dụng chuyển hướng đến trang gốc. Bất kỳ sai sót rõ ràng trong mã này?

Trả lời

13

Bạn cần phải sử dụng:

$_SERVER['HTTP_REFERER'] 
0

Cũng lưu ý rằng tiêu đề referer có thể rỗng hoặc mất tích dù sao, vì vậy bạn không nên dựa vào điều đó chút nào ..

14

Đừng dựa vào Liên kết giới thiệu HTTP là trường hợp lệ hoặc thậm chí không trống. Mọi người có thể chọn không có bộ này để lại bất kỳ kiểm tra nào cho biến đó đi tới phía trống của mệnh đề IF-ELSE.

Bạn có thể bảo vệ chống lại điều này bằng cách gửi cùng với thông số trong tham số URL hoặc POST sẽ giữ giá trị mà bạn có thể sử dụng để chuyển hướng người dùng quay lại.

+3

+1. Các liên kết giới thiệu vốn không đáng tin cậy. Sử dụng tham số để hướng người dùng đến nơi bạn muốn họ đi sau biểu mẫu. – bobince

0

Bạn nên sử dụng

$_SERVER['HTTP_REFERER'] 

Tuy nhiên nhìn vào cấu hình register_globals trong php.ini, nó nên được tắt vì lý do an ninh. Bạn có thể đọc thêm trên PHP Manual site.

1

isset ($ _ SERVER ['HTTP_REFERER'])? $ _SERVER ['HTTP_REFERER']: '';

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