我正在尝试获取用户的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,如果是,我想给用户一些额外的“点击”来排名。像小型联盟系统。
答案 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');