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