【问题标题】:How would I go about writing a conditional statement to check if visitor is coming from a particular site?我将如何编写条件语句来检查访问者是否来自特定站点?
【发布时间】:2011-03-01 07:58:00
【问题描述】:

我的想法是...我们将在收购活动期间让人们来自特定网站,并且想知道如何设置我网站的某个部分以显示感谢消息而不是注册表格,因为他们有机会在进入我的登录页面之前填写此表格。

我见过这样的解决方案:$referal = mysql_real_escape_string($_SERVER['HTTP_REFERER']);

我想知道这是否是让它工作的最佳方式???

->>> 好吧,我认为这可能有效。一旦填写了该站点上的表格,将人们引至我们的登录页面的第三方网站可以将“www.sample.com”或其他任何隐藏输入值推送到记录中......然后我可以检查一下用于该特定值并触发条件。

这听起来对吗?

【问题讨论】:

    标签: php mysql conditional


    【解决方案1】:

    如果您不知道这听起来是否正确,那么您将很难实现它。

    你可以这样做:

    • 检查引用。它在变量$_SERVER['HTTP_REFERER'] 中,但您不需要一个mysql_real_escape 字符串来检查用户是否来自特定站点。请注意,referer 基本上是“用户定义的”,因此您既不能依赖它,也不能信任它。
    • 如果他们必须填写表格,只需添加<input type="hidden" ..。请注意,这也可能是伪造的。
    • 添加一个 GET 参数并使用 if( isset($_GET['ref']) ) 检查它,表单将如下所示 <form action="http://yoursite/register.php?ref" method="POST">

    【讨论】:

      【解决方案2】:

      $_SERVER['HTTP_REFERER'] 是您将获得的有关访问者来自何处的最可靠信息。而且它一点也不可靠。一些浏览器可能被配置为根本不发送该标头,任何人都可以发送错误信息,声称他们来自http://ultra-secure.top-secret.government.gov/,如果他们愿意的话。

      考虑到这一点,听起来完美的可靠性并不是这里的考虑因素,您只是希望通过正确的HTTP_REFERER 集为访问者节省一些时间。

      在这种情况下,将该值的开头部分与您希望访问者使用预先填写的注册信息源自的 www.example.com 地址进行比较,将是最好的方法。

      这是一个例子:

      $site = "http://www.sample.com/";
      if (!empty($_SERVER['HTTP_REFERER']) &&
              substr($_SERVER['HTTP_REFERER'], 0, strlen($site)) == $site) {
          //if execution reaches this point, user claims he came from www.sample.com
      }
      

      【讨论】:

      • 在您发布答案之前,我添加了我正在编写的示例。希望你不要介意。
      • 好的...为了避免使用 HTTP_REFERER,我可以让他们将某个值推送到我的数据库中。当填写该表格的访问者提交时,他们会被带到我们的网站。现在的问题是我可以在页面加载时检查该值是否是此人记录的一部分吗?
      • 如果您能够与其他网站合作,让他们将唯一 ID 插入您的数据库,然后重定向到您网站上的脚本在 URL 中使用该脚本乙>。然后就很容易准确地分辨出你在看谁。
      • @Matthew 如果流程是您的站点 -> 另一个站点 -> 您的站点并且您可以控制另一个站点,则创建一个唯一令牌,将用户转发到具有该令牌部分的另一个站点查询字符串,并在用户在那里提交表单时让其他站点将该令牌传递回您(例如,作为 303 转发的一部分,或者不太推荐,直接在您的站点上使用表单操作)。您必须在生成唯一令牌时将其存储在数据库中,并在用户返回您的站点后使其失效。
      • @Artefacto - 好的,我们可以控制网站和这些人来自的形式。我只需要知道我是否选择通过隐藏输入传递一个值,并在他们提交表单后在他们被定向到我们的网站时检查这个值是最好和最简单的选择。如果是这样,我想知道那个语法是什么看起来像。如果这是重复的,我很抱歉,但这有点超出我对 php 和条件的了解。
      【解决方案3】:

      根据您的整体用例,我认为最好的方法是让引用您的网站传递一个特殊的 POST 或 GET 参数,无论哪个合适。

      【讨论】:

      • +1,我同意。如果您可以控制引用站点,则发送 POST 或 GET 参数比 $_SERVER['HTTP_REFERER'] 更可靠。
      • 真的,无所谓。如果访问者知道他应该来自哪个站点,他不妨添加特殊的 GET 或 POST 参数。如果他知道他应该来自哪个站点,但不知道特定页面(因此不知道要添加哪个参数),您可以将 $_SERVER['HTTP_REFERER'] 与该特定页面匹配,您将拥有相同的......“安全”级别。
      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2017-07-07
      • 2011-05-20
      • 2020-12-15
      • 2012-01-06
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多