【问题标题】:Determine I.P. Address of Referring Site [closed]确定IP推荐网站地址
【发布时间】:2011-09-07 15:58:17
【问题描述】:

我目前正在开发一个营销模块,用于跟踪为我们的网站带来流量的网站。有没有办法获取域名或IP?使用 PHP 的引用站点的地址?我相信 HTTP_REFERER 并不总是出现在 $_SERVER 全局变量中。

提前致谢。

【问题讨论】:

    标签: php apache seo


    【解决方案1】:

    HTTP_REFERER 标头必须由客户端的浏览器发送。你不能指望它被发送。

    未发送的情况包括:

    • 用户手动输入地址
    • 用户在go through great lengths to obscure the REFERER 的大型电子邮件客户端之一中打开一个链接
    • 用户的浏览器被配置为阻止引荐来源标头(罕见)
    • 用户正在切换协议(即 http 站点上的链接指向 https 站点,反之亦然)

    在这种情况下,你无能为力。

    如果您控制链接站点,则可以在链接的 GET 参数中添加引荐来源网址:

    http://example.com/?from=mysite
    

    然后您可以解析脚本中的from 参数。

    将引荐来源网址字符串转换为 IP 通常不是一个好主意,因为许多 IP 地址托管了数十或数百个站点。用户来自哪个站点的区别将会丢失。

    【讨论】:

      【解决方案2】:

      引用地址存在于所有合作浏览器的请求标头中,这些浏览器都有引用者。如果用户只是输入了您的 URL,那么就没有引荐来源网址。

      将 URL 转换为 IP 地址是一件简单的编程事情:

      <?php
      $raddr = gethostbyaddr($_SERVER['HTTP_REFERER']);
      
      ?>
      

      【讨论】:

      • 那个“琐碎的编程问题”实际上是个问题。
      • @DOK 我不认为 OP 真的想要这个。将主机名转换为 IP 地址是一个糟糕的主意(因为您有效地破坏了有关用户来自哪个站点的信息)。
      • @Pekka,这实际上很重要,因为我需要从原始站点的 IP 地址获取国家/地区:D
      • .. 但它会是 gethostbyname,而不是 gethostbyaddr,并且 HTTP_REFERER 是一个网址,而不是一个域名,.. 这样就不那么简单了..
      • gethostbyname(parse_url($_SERVER['HTTP_REFERER'])['host'])
      【解决方案3】:

      如果 HTTP_REFERER 未显示在服务器中,则该用户没有通过链接进入您的站点,或者他有办法通过浏览器屏蔽该变量。您无能为力。

      【讨论】:

        【解决方案4】:

        如果它没有出现在 $_SERVER 中,通常意味着客户端没有发送它。推荐人是不能信任准确性的数据,因为它完全取决于用户(更具体地说是他们的浏览器)。

        你最好的办法是检查referer是否在那里,然后在域上使用gethostbyname()函数来获取你想要的IP。

        http://php.net/manual/en/function.gethostbyname.php

        【讨论】:

          【解决方案5】:

          您可以使用 $_SERVER['HTTP_REFERER'] 确定引用 URL,但请记住,这可以被操纵。

          然后您可以使用gethostbyname($referrer) 获取IP 地址。

          请参阅:http://php.net/manual/en/reserved.variables.server.phphttp://php.net/manual/en/function.gethostbyname.php

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-22
            • 1970-01-01
            • 1970-01-01
            • 2018-01-28
            • 1970-01-01
            • 1970-01-01
            • 2012-05-15
            • 1970-01-01
            相关资源
            最近更新 更多