如何将HTTP referrer传递给PHP脚本

时间:2009-10-07 05:23:57

标签: php referrer

这似乎应该很简单。任何指针都会非常感激。

考虑三个站点:

  • widgetserver.com,为客户端站点提供小部件
  • clientsite.com,显示小部件
  • previoussite.com,这是一个链接到clientsite.com的网站

在clientsite.com的页面中,有一段代码在widgetserver.com上调用PHP函数。它看起来像这样:

<script type="text/javascript" src="http://widgetserver.com/show_widget.php></script>

加载clientsite.com时,它会运行“show_widget.php”,然后将小部件放在页面上。

这就是我被困的地方:我想从“show_widget.php”中访问将用户引荐到clientsite.com的网站,但是在这个功能中我们在widgetserver.com上,所以引用者是客户端.com,而不是previoussite.com。

有什么方法可以将clientsite.com的推荐人传递给“show_widget.php”吗?

3 个答案:

答案 0 :(得分:4)

document.referrer包含您想要的引用者信息,因此如果他们正在运行javascript,您可以执行以下操作:

<script language="javascript" type="text/javascript">
var script = document.createElement("script");
script.src = "http://widgetserver.com/show_widget.php?r="+document.referrer;
document.getElementsByTagName("head")[0].appendChild(script);
</script>

这需要在head标签的OUTSIDE之外(除非它在函数绑定到文档就绪事件或其他东西),否则它将失败。

这背后的想法是在页面上生成具有所需属性的动态标签。第一行创建它,第二行设置脚本src,第三行将它加载到document.head DOM元素中,这会导致它被评估,并根据需要加载文档。

如果您的客户使用的是jQuery,则使用$ .getScript会更容易,同时使用document.referrer

答案 1 :(得分:1)

您无法从show_widget.php脚本中“猜测”此信息:客户必须将该信息传输到您的脚本。

这意味着您的小部件应该包含在某些代码中,例如(如果客户端上的页面是在PHP中生成的)

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo urlencode($_SERVER['HTTP_REFERER']); ?>>
</script>

当然:

  • 为了安全起见(并获得有效的HTML),不要忘记在将其注入页面时逃避引用者
  • 引用者可能并不总是存在:它是由用户的浏览器发送的,可以伪造和/或禁用。

为避免在用户浏览器没有发送引用时生成/显示“通知:未定义索引:HTTP_REFERER”,您可能还需要添加一个检查,以确定在使用它之前是否已定义 - 使用isset;例如,这样的事情可能会:

<script 
    type="text/javascript" 
    src="http://widgetserver.com/show_widget.php?referer=<?php echo isset($_SERVER['HTTP_REFERER']) ? urlencode($_SERVER['HTTP_REFERER']) : ''; ?>>
</script>

答案 2 :(得分:1)

您可以检测到clientside.com主脚本上的引用,并将其作为变量传递给您的脚本:

// clientsite.com script
<?PHP

    echo $main_page;
    $ref = $_SERVER['HTTP_REFERER'];
    echo '<script type="text/javascript" ' .
      'src="http://widgetserver.com/show_widget.php?r=' . $ref . '></script>';

?>

// widgetserver.com script
<?PHP
    $original_referrer = $_REQUEST['r'];
?>