MSIE中$ _SERVER ['HTTP_REFERER'] PHP变量的替代方案

时间:2010-10-19 07:12:35

标签: php internet-explorer internet-explorer-8 httprequest http-referer

我在我的应用程序中使用了$_SERVER['HTTP_REFERER']变量(使用了PHP)。 在Firefox上面,变量很重要。但我发现$_SERVER['HTTP_REFERER']无法在Microsoft Internet Explorer 8上运行。 我还知道HTTP_REFERER变量在MSIE8和MSIE7上不起作用。

请向我提出您的建议,如何使用$_SERVER['HTTP_REFERER']变量摆脱MSIE7 / 8或$_SERVER['HTTP_REFERER']变量还有其他选择

感谢您的建议。

-Pravin。

2 个答案:

答案 0 :(得分: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以及您网站的所有后续网页时,系统都可以访问推荐人。

答案 1 :(得分: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;
    });
});