【问题标题】:Alternative for $_SERVER['HTTP_REFERER'] PHP variable in MSIEMSIE 中 $_SERVER['HTTP_REFERER'] PHP 变量的替代方案
【发布时间】:2011-04-27 08:01:49
【问题描述】:

我在我的应用程序中使用了 $_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'] 变量是否有其他替代方法

感谢您的建议。

-普拉文。

【问题讨论】:

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


【解决方案1】:

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

// 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】:

不要使用会话来猜测引荐来源网址。这将导致不良行为和奇怪的错误。

如果您确实需要知道引用页面,请通过请求参数传递。可以通过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;
    });
});

【讨论】:

  • 能否请您举例说明不良行为或奇怪错误?
  • @AndreChenier 当用户在多个窗口中使用该站点时,会发生一种情况。如果用户在第二个窗口中打开一个页面,然后返回到第一个窗口并单击“返回”按钮,它可以将他重定向到他在第二个窗口中打开的页面,这可能不是他真正想要或可以从您的站点获得的.
  • 当程序员依赖单窗口模式时,这种情况也会产生错误。缓存页面也可能产生非常相似的效果。
猜你喜欢
  • 1970-01-01
  • 2015-09-06
  • 2012-09-27
  • 1970-01-01
  • 2018-12-04
  • 2021-01-17
  • 2011-05-29
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多