2009-12-08 23 views
93

Tôi đang sử dụng $_SERVER['HTTP_REFERER']; để nhận Url của người giới thiệu. Nó hoạt động như mong đợi cho đến khi người dùng nhấp vào một trang khác và người giới thiệu thay đổi trang cuối cùng.Nhận referer URL gốc bằng PHP?

Làm cách nào để lưu trữ Url giới thiệu ban đầu?

Trả lời

113

Lưu trữ cookie trong cookie (nếu được chấp nhận cho trường hợp của bạn) hoặc trong biến phiên.

session_start(); 

if (!isset($_SESSION["origURL"])) 
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"]; 
+12

Xin lưu ý lời khuyên của @pcp trong câu trả lời dưới đây! –

+4

Lưu ý rằng bạn cũng nên kiểm tra xem liệu 'http_referer' có tồn tại không, điều này có thể gây ra lỗi" Chỉ mục không xác định ". – Justin

4

Lưu trữ nó trong một cookie mà chỉ kéo dài trong phiên duyệt web hiện tại

15

Như Johnathan đề nghị, bạn sẽ hoặc là muốn lưu nó trong một cookie hay một phiên làm việc.

Cách dễ dàng hơn là sử dụng biến phiên.

session_start(); 
if(!isset($_SESSION['org_referer'])) 
{ 
    $_SESSION['org_referer'] = $_SERVER['HTTP_REFERER']; 
} 

Đặt điều đó ở đầu trang và bạn sẽ luôn có thể truy cập giới thiệu đầu tiên mà khách truy cập trang web được hướng dẫn.

80

Và đừng quên thoát khỏi $_SERVER["HTTP_REFERER"] vì đây là một vector tấn công chung cho ứng dụng web.

+40

Bạn có thể cho chúng tôi mẫu và đăng ít hơn trong bài đăng của bạn không. – TheBlackBenzKid

+2

Tuy nhiên, đây là một biến thể máy chủ không đáng tin cậy vì trong một số trình duyệt và trong một số điều kiện, biến này không được đặt ở tất cả. –

+0

@ TheBlackBenzKid - Đây là một câu trả lời StackOverflow nhanh chóng trên các biến thoát trong PHP. Có một số cách có thể thực hiện: http://stackoverflow.com/questions/13199095/escaping-variables –

1

Sử dụng Cookie làm kho chứa trang tham chiếu tốt hơn trong hầu hết các trường hợp, vì cookie sẽ giữ liên kết giới thiệu cho đến khi trình duyệt đóng (và sẽ giữ nó ngay cả khi tab trình duyệt bị đóng), trong trường hợp người dùng rời trang mở, giả sử trước ngày cuối tuần và quay lại sau một vài ngày, phiên của bạn có thể sẽ hết hạn, nhưng cookie vẫn sẽ ở đó.

Đặt mã mà tại bắt đầu của một trang (trước khi bất kỳ sản lượng html, như cookie sẽ được thiết lập đúng chỉ trước khi bất kỳ echo/in):

if(!isset($_COOKIE['origin_ref'])) 
{ 
    setcookie('origin_ref', $_SERVER['HTTP_REFERER']); 
} 

Sau đó, bạn có thể truy cập vào nó sau:

$var = $_COOKIE['origin_ref']; 

Và ngoài những gì @pcp đề xuất về việc thoát $ _SERVER ['HTTP_REFERER'], khi sử dụng cookie, bạn cũng có thể muốn thoát $ _COOKIE ['origin_ref'] trên mỗi yêu cầu.