13

我在我的應用程序中使用了$_SERVER['HTTP_REFERER']變量(使用PHP)。 在Firefox上面的變量是wokring。但我觀察到$_SERVER['HTTP_REFERER']不能在Microsoft Internet Explorer 8上運行。 我也知道HTTP_REFERER變量在MSIE8和MSIE7上不起作用。

請給我你的建議,如何使用$_SERVER['HTTP_REFERER']變量來擺脫對MSIE7/8或是有$_SERVER['HTTP_REFERER']可變

感謝您的建議,任何其他選擇。

-Pravin。

+3

[HTTP推薦和IE7和IE8(可能重複http://stackoverflow.com/questions/2460490/http-referrer-and-ie7 - 和 - ie8) – 2010-10-19 07:17:58

+0

http://bytes.com/topic/php/answers/853533-http_referer-alternative – 2010-10-19 07:40:11

+1

@Col:感謝您的建議,HTTP_REFERER的任何替代? – pravin 2010-10-19 09:10:14

回答

25

如果您只需要在您的網站內部使用引用信息(即:在您網站的頁面之間,而非外部),則可以手動跟蹤用戶的引用信息。

// 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(); 

然後,要訪問引用鏈接,只需使用$referrer變量。

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

這樣一來,如果用戶訪問http://www.example.com/page_1.php,他們將看到的引薦信息,如果他們的瀏覽器已經提供了,否則沒有引用。然後,當他們訪問http://www.example.com/page_2.php以及您網站的任何後續頁面時,推薦人都可以訪問。

+2

非常糟糕的做法。這會在multitab/multiwindow會話和緩存頁面中導致奇怪/錯誤的行爲。 – raacer 2016-02-13 21:24:10

1

請勿使用會話猜測引用者。這會導致不希望的行爲和奇怪的錯誤。

如果您確實需要知道引用頁面,請通過請求參數傳遞它。您可以使用JS腳本或在服務器端添加參數。

jQuery的變種對頁面上的所有鏈接:

$(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

請舉例說明不良行爲或奇怪的錯誤? – 2016-05-14 12:50:08

+0

@AndreChenier當用戶在多個窗口中使用網站時會發生一次。如果用戶在第二個窗口中打開頁面,然後返回到第一個窗口並單擊後退按鈕,它可以將他重定向到他在第二個窗口中打開的頁面,這可能不是他真正想要或可以從您的站點期望的頁面。 – raacer 2016-05-17 16:02:10

+0

當程序員放棄單窗口模式時,這種情況也會產生錯誤。緩存的頁面也可能產生非常相似的效果。 – raacer 2016-05-17 16:07:12

相關問題