13

Tôi đã sử dụng biến số $_SERVER['HTTP_REFERER'] trong ứng dụng của mình (đã sử dụng PHP). Trên Firefox, các biến trên đang bị xóa. Nhưng tôi quan sát thấy rằng $_SERVER['HTTP_REFERER'] không hoạt động trên Microsoft Internet Explorer 8. Tôi cũng đã biết rằng HTTP_REFERER biến không hoạt động trên MSIE8 và MSIE7.

Xin vui lòng cho tôi đề xuất của bạn, làm thế nào để sử dụng $_SERVER['HTTP_REFERER'] biến để thoát khỏi trên MSIE7/8 hoặc có bất kỳ thay thế khác cho $_SERVER['HTTP_REFERER'] biến

Cảm ơn đề nghị của bạn.

-Pravin.

+3

thể trùng lặp của [HTTP Người giới thiệu và IE7 và IE8] (http://stackoverflow.com/questions/2460490/http-referrer-and-ie7 -and-ie8) –

+0

http://bytes.com/topic/php/answers/853533-http_referer-alternative –

+1

@Col: cảm ơn đề xuất của bạn, có bất kỳ sự thay thế nào cho HTTP_REFERER không? – pravin

Trả lời

25

Nếu bạn chỉ cần sử dụng thông tin liên kết giới thiệu nội bộ cho trang web của bạn (ví dụ: giữa các trang trong trang web của bạn, không phải bên ngoài), bạn có thể theo dõi thông tin liên kết giới thiệu của người dùng theo cách thủ công.

// Get the full URL of the current page 
function current_page_url(){ 
    $page_url = 'http'; 
    if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){ 
     $page_url .= 's'; 
    } 
    return $page_url.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
} 

/* (Assuming session already started) */ 
if(isset($_SESSION['referrer'])){ 
    // Get existing referrer 
    $referrer = $_SESSION['referrer']; 

} elseif(isset($_SERVER['HTTP_REFERER'])){ 
    // Use given referrer 
    $referrer = $_SERVER['HTTP_REFERER']; 

} else { 
    // No referrer 
} 

// Save current page as next page's referrer 
$_SESSION['referrer'] = current_page_url(); 

Sau đó, để truy cập liên kết giới thiệu, chỉ cần sử dụng biến số $referrer.

if(isset($referrer)){ 
    echo 'Referred from "'.$referrer.'"'; 
    echo '<a href="'.$referrer.'">Back</a>'; 
} else { 
    echo 'No referrer'; 
} 

Bằng cách đó, nếu người dùng truy cập http://www.example.com/page_1.php, họ sẽ thấy những thông tin giới thiệu nếu trình duyệt của họ đã cung cấp cho nó, nếu không có người giới thiệu. Sau đó, khi họ truy cập http://www.example.com/page_2.php và mọi trang tiếp theo của trang web của bạn, liên kết giới thiệu sẽ có thể truy cập được.

+2

Cách tiếp cận rất xấu. Điều này sẽ gây ra hành vi lạ/sai trong phiên multitab/multiwindow và trên trang được lưu trong bộ nhớ cache. – raacer

1

Vui lòng không sử dụng phiên để đoán liên kết giới thiệu. Điều này sẽ dẫn đến hành vi không mong muốn và các lỗi lạ.

Nếu bạn thực sự cần biết trang giới thiệu, hãy chuyển qua thông số yêu cầu. Bạn có thể thêm tham số bằng JS script hoặc ở phía máy chủ.

jQuery biến cho tất cả các liên kết trên trang:

$(document).ready(function(){ 
    $('a').on('click', function(e) { 
     url = this.getAttribute('href'); 
     // Check if the page is internal. 
     if (url.charAt(0) != '/') { 
      return; 
     } 
     e.preventDefault(); 
     // Append referrer. 
     url += url.indexOf('?') === -1 ? '?' : '&'; 
     url += 'referer=' + encodeURIComponent(document.URL); 
     window.location = url; 
    }); 
}); 
+0

Bạn có thể đưa ra ví dụ về hành vi không mong muốn hoặc lỗi lạ? –

+0

@AndreChenier One xảy ra khi người dùng sử dụng trang web trong nhiều cửa sổ. Nếu người dùng mở một trang trong cửa sổ thứ hai sau đó quay trở lại cửa sổ đầu tiên và nhấp vào nút Quay lại, nó có thể chuyển hướng anh đến trang mà anh đã mở trong cửa sổ thứ hai, có thể không phải là những gì anh thực sự muốn hoặc có thể mong đợi từ trang web của bạn . – raacer

+0

Tình huống như vậy cũng tạo ra lỗi khi lập trình viên tuân theo chế độ cửa sổ đơn. Các trang được lưu trong bộ nhớ cache cũng có thể tạo ra hiệu ứng rất giống nhau. – raacer

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