如何在laravel中获得http referer?

hpcdzsge  于 2022-11-18  发布在  其他
关注(0)|答案(8)|浏览(493)

我试着得到我的用户的推荐人。比如他们来自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
}

但一切都不像预期的那样。
有人知道如何检查推荐人的解决方案吗?
我需要,因为我想检查用户是否来自一些特定的网址,如果是这样,我想给予用户一些额外的“点击”排名上升。

iszxjhcz

iszxjhcz1#

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

Request::server('HTTP_REFERER').

您可以在此处阅读Api DOC:
https://laravel.com/api/8.x/Illuminate/Http/Request.html#method_server

hgqdbh6s

hgqdbh6s2#

Laravel获得裁判的方式:

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

vfhzx4xs3#

您可以使用request()辅助对象:

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

Request外观:

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

093gszye4#

你得到Undefined index: HTTP_REFERER的原因是因为不是所有的请求都有HTTP_REFERER头,只有大多数来自其他网站的请求才有HTTP_REFERER头。如果你直接用url访问一个网站,你就不会发送HTTP_REFERER头。
因此,您应该先检查是否设置了标头。

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

3zwtqj6y5#

我们可以使用url()帮助器

url()->previous();

如果你想回到初始化请求的页面,我们只需要写这个(通常在控制器中):

return redirect()->back();
lrl1mhuk

lrl1mhuk6#

我希望这条消息能让你对你的代码感到满意。但是,如果你遇到了任何关于引用URL的问题,你可能应该阅读这篇文章https://scotthelme.co.uk/a-new-security-header-referrer-policy/
我一直在我的Laravel + NGINX应用程序中面临引用URL的问题,并尝试了所有可能的方法来修复,通过上面的评论中提到的代码(回,前,头等),但最终发现这篇文章丰富了我的知识,然后才适当地修复我的问题。

46scxncf

46scxncf7#

由客户端在HTTP请求的报头中发送引用者信息。
因此,如果客户端(浏览器,应用程序等)不发送引用,它将无法在请求头中提供给服务器。我猜WhatsApp应用程序已经禁用了发送引用,所以没有办法获得它。
在一些浏览器中,可以在设置中或通过扩展关闭发送引用者信息。例如,它也很容易被curl欺骗,所以它不能作为一种安全措施。
更多信息在我的答案在这里:https://stackoverflow.com/questions/49050268/does-document-referrer-equal-the-http-referer-header/49050494
如果您不确定客户端是否发送了referrer,可以使用JavaScript进行检查(这里的referrer与HTTP头的拼写不同,增加了混淆):

console.log(
    document.referrer
);
wyyhbhjk

wyyhbhjk8#

Route::get('/send', function (Request $request) { 
    echo $request->headers->get('referer');
});

相关问题