Laravel 5.4获得Referer

时间:2017-08-16 12:21:27

标签: php laravel http-referer

我正在尝试获取用户的Referer。就像他们来自facebook,youtube,谷歌或其他任何东西。

现在我尝试过类似的东西:

        $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,如果是,我想给用户一些额外的“点击”来排名。像小型联盟系统。

6 个答案:

答案 0 :(得分:15)

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

Request::server('HTTP_REFERER').

您可以在此处阅读Api DOC:

http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_server

答案 1 :(得分:2)

您获得Undefined index: HTTP_REFERER的原因是因为并非所有请求都有HTTP_REFERER标头,只有大多数来自其他网站的请求。如果您直接使用网址访问网站,则不会发送HTTP_REFERER标题。

因此,您应该检查首先是否设置了标题。

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

答案 2 :(得分:1)

您可以使用 request() 助手:

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

Request 门面:

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

答案 3 :(得分:0)

希望此消息对您的代码感到满意。但是,如果您在引荐来源网址方面遇到任何问题,则可能应该阅读本文https://scotthelme.co.uk/a-new-security-header-referrer-policy/

引荐来源网址标头是此类问题背后的关键。我一直在我的Laravel + NGINX应用程序中遇到引荐来源网址问题,并尝试了所有可能的方法通过上述注释(返回,上一个,标头等)中提到的代码来解决此问题,但最终找到了这篇文章,以丰富我的知识,然后修复我的问题适当地。

答案 4 :(得分:0)

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

因此,如果客户端(浏览器,应用程序等)未发送引荐来源网址,则服务器在请求标头中将无法使用引荐来源网址。我猜WhatsApp应用已禁止发送引荐来源网址,因此没有办法获取它。

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

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

如果不确定客户端是否发送引荐来源网址,可以轻松地使用JavaScript进行检查(引荐来源网址的拼写方式与HTTP标头不同,这会增加混乱):

console.log(
    document.referrer
);

答案 5 :(得分:0)

正确的方法是使用

use Illuminate\Http\Request;

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