【问题标题】:How to get the http referer in laravel?如何在 laravel 中获取 http referer?
【发布时间】:2018-01-24 14:06:34
【问题描述】:

我正在尝试获取我的用户的推荐人。就像他们来自 facebook、youtube、google 或其他任何东西一样。

现在我尝试了类似的方法:

$referrer = $this->request->headers->get('referer');
$url = $referrer ? $this->to($referrer) : $this->getPreviousUrlFromSession();
return $url ?: $this->to('/'); // returns: Method referer does not exist.

这个:

return $_SERVER["HTTP_REFERER"] // returns Undefined index: HTTP_REFERER

那个:

session_start();
    
if ( !isset( $_SESSION["origURL"] ) ) {
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"]; // returns Undefined index: HTTP_REFERER
}

但没有任何事情像预期的那样工作。

有人知道我如何检查推荐人的解决方案吗?

我需要它,因为我想检查用户是否来自某些特定的 URL,如果是,我想给用户一些额外的“点击”来排名。类似于小型联属网络营销系统。

【问题讨论】:

  • 请注意 - 推荐人受客户如实宣布...在“真实”意义上是不可靠的。

标签: php laravel laravel-5 http-referer


【解决方案1】:

这似乎可以满足您的需求:

Request::server('HTTP_REFERER').

您可以在此处阅读 Api 文档:

https://laravel.com/api/8.x/Illuminate/Http/Request.html#method_server

【讨论】:

  • 我已经尝试过了,但这总是返回“null”
  • @PHPprogrammer42 那么可能没有发送referer。
  • 这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。
  • mhh.. 那么你会怎么做,以检查用户是否点击了如下链接:“mywebsite.com/unicorn/1111111 -- 不是来自我的网站本身?所以我可以用id 1111111 一些额外的点击
【解决方案2】:

您可以使用request() 助手:

request()->headers->get('referer');

或者Request门面:

Request::header('referer');
Request::server('HTTP_REFERER'); // same thing as above

【讨论】:

    【解决方案3】:

    Laravel 获取referer的方式:

    request()->headers->get('referer');
    

    【讨论】:

      【解决方案4】:

      由客户端在 HTTP 请求的标头中发送引荐来源信息。

      因此,如果客户端(浏览器、应用程序等)不发送引荐来源网址,则请求标头中的服务器将无法使用该引荐来源网址。我猜 WhatsApp 应用程序已禁用发送推荐人,所以没有办法得到它。

      在某些浏览器中,可以在设置中或使用扩展程序关闭推荐人信息的发送。例如,它也很容易被 curl 欺骗,因此不能将其作为安全措施。

      我的答案中的更多信息:https://stackoverflow.com/questions/49050268/does-document-referrer-equal-the-http-referer-header/49050494

      如果您不确定客户端是否发送了引荐来源网址,可以使用 JavaScript 轻松检查(此处引荐来源网址的拼写与 HTTP 标头不同,以增加混淆):

      console.log(
          document.referrer
      );
      

      【讨论】:

        【解决方案5】:

        我希望这条消息能让您对自己的代码感到满意。但是,如果您在引用 URL 方面遇到任何问题,您可能应该阅读这篇文章 https://scotthelme.co.uk/a-new-security-header-referrer-policy/

        Referrer Policy 标头是此类问题背后的关键。我在我的 Laravel + NGINX 应用程序中遇到了引用 URL 的问题,并尝试了所有可能的方法来通过上述 cmets 中提到的代码(返回、上一个、标题等)来解决这个问题,但最终发现这篇文章在解决我的问题之前丰富了我的知识适当地。

        【讨论】:

          【解决方案6】:

          您得到Undefined index: HTTP_REFERER 的原因是因为并非所有请求都有HTTP_REFERER 标头,只有来自其他网站的大部分请求。如果您直接使用 url 访问网站,您将不会发送 HTTP_REFERER 标头。

          所以,你应该先检查是否设置了标题。

          if (!isset($_SESSION["origURL"]) && array_key_exists('HTTP_REFERER', $_SERVER))
              $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
          

          【讨论】:

          • 如果我来自 facebook,那很好。我主要想检查用户是否来自whatsapp。如果我发布重定向到此代码的 URL,我只会得到“null”。也许是因为 whatsapp 是一个应用程序,而不是一个网站。但是如果我查看我的日志,我可以看到引用者是 chat.whatsapp.com -- 奇怪
          • 我获得了我在我的网站上使用的特定统计程序的日志文件。在那里我可以看到一些用户数据,如 IP、浏览器、引用者等。
          猜你喜欢
          • 1970-01-01
          • 2014-12-30
          • 2014-06-08
          • 2012-10-12
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多