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

14

我在我的应用程序中使用了$_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。


http://bytes.com/topic/php/answers/853533-http_referer-alternative - Asif Mulla
1
@Col:感谢您的建议,有没有HTTP_REFERER的替代方案? - pravin
2个回答

27

如果你只需要在网站内部使用引荐信息(即在网站页面之间,而不是外部),你可以手动跟踪用户的引荐信息。

// 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,只需使用$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,如果他们的浏览器提供了referrer信息,那么它们将看到该信息,否则没有referrer。然后当他们访问http://www.example.com/page_2.php和您网站的任何后续页面时,referrer将是可访问的。


5
非常糟糕的方法。这将导致多标签页/多窗口会话和缓存页面出现奇怪/错误的行为。 - raacer

1
请不要使用 session 来猜测引荐方。这会导致意想不到的行为和奇怪的错误。
如果您确实需要知道引荐页面,请通过请求参数传递。您可以使用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;
    });
});

请您举个例子说明不期望的行为或奇怪的错误? - Andre Chenier
@AndreChenier,这种情况通常发生在用户同时在多个窗口中使用网站时。如果用户在第二个窗口打开一个页面,然后返回到第一个窗口并单击“返回”按钮,则可能会将其重定向到他在第二个窗口中打开的页面,这可能不是他真正想要或期望从您的网站获得的体验。 - raacer
这种情况也会在程序员依赖单窗口模式时产生错误。同时,缓存页面可能会产生非常相似的效果。 - raacer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接