Wie bekomme ich den http-Referer in Laravel?

Lesezeit: 4 Minuten

Benutzeravatar von PHPprogrammer42
PHPprogrammierer42

Ich versuche, den Referer meiner Benutzer zu erhalten. Wie, wenn sie von Facebook, YouTube, Google oder irgendetwas anderem kommen.

Jetzt habe ich so etwas probiert:

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

Diese:

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

das:

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

Aber nichts funktionierte wie erwartet.

Kennt jemand eine Lösung wie ich den Referer überprüfen kann?

Ich brauche das, weil ich überprüfen möchte, ob der Benutzer von einer bestimmten URL kommt, und wenn ja, möchte ich dem Benutzer einige zusätzliche “Klicks” geben, um einen höheren Rang zu erreichen. So etwas wie ein kleines Affiliate-System.

  • Seien Sie sich bewusst – der Referrer ist davon abhängig, dass der Kunde ihn wahrheitsgemäß angibt … er ist nicht im “wahren” Sinne zuverlässig.

    – wallig

    16. August 2017 um 12:27 Uhr

Benutzeravatar von Thibault Dumas
Thibault Dumas

Es scheint, als würde dies das tun, wonach Sie suchen:

Request::server('HTTP_REFERER').

Sie können das API-DOC hier lesen:

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

  • Ich habe das ausprobiert, aber das gibt immer “null” zurück

    – PHPprogrammer42

    16. August 2017 um 12:37 Uhr

  • @PHPprogrammer42 Dann wird wahrscheinlich kein Referer gesendet.

    – Jan

    16. August 2017 um 12:38 Uhr

  • Dies wird vom Benutzeragenten festgelegt. Nicht alle Benutzeragenten werden dies festlegen, und einige bieten die Möglichkeit, HTTP_REFERER als Funktion zu ändern. Kurz gesagt, es kann nicht wirklich vertraut werden.

    – Thibault Dumas

    16. August 2017 um 12:43 Uhr

  • mhh.. also was würden Sie tun, um zu überprüfen, ob der Benutzer auf einen Link geklickt hat wie: “meinewebsite.com/unicorn/1111111 — Ohne von meiner Website selbst zu kommen? So kann ich dem “Thread” mit der ID 1111111 einige zusätzliche Klicks geben

    – PHPprogrammer42

    16. August 2017 um 12:48 Uhr


  • 404 auf den Link, hier ist der gute: laravel.com/api/8.x/Illuminate/Http/Request.html#method_server

    – Romain ‘Maz’ BILLOIR

    9. Mai 2021 um 20:48 Uhr

Benutzeravatar von Rejneesh
Rejneesh

Laravel-Methode, um einen Referer zu erhalten:

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

Benutzeravatar von Pierre Arnissolle
Pierre Arnissolle

Du kannst den … benutzen request() Helfer:

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

oder der Request Fassade:

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

Der Grund, den Sie bekommen Undefined index: HTTP_REFERER liegt daran, dass nicht alle Anfragen a haben HTTP_REFERER Header, nur die meisten Anfragen, die von anderen Websites kommen. Wenn Sie eine Website direkt mit der URL besuchen, senden Sie keine HTTP_REFERER Header.

Sie sollten also zuerst prüfen, ob der Header gesetzt ist.

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

Benutzeravatar von LucianDex
LucianDex

Wir können den Helfer url() verwenden

url()->previous();

Wenn Sie zu der Seite zurückkehren möchten, die die Anfrage initialisiert, schreiben wir einfach dies (normalerweise in der Steuerung):

return redirect()->back();

Benutzeravatar von Syed Mobarak
Syed Mobarak

Ich hoffe, diese Nachricht findet Sie mit Ihrem Code zufrieden. Wenn Sie jedoch auf Probleme mit der Referrer-URL stoßen, sollten Sie wahrscheinlich diesen Artikel lesen https://scotthelme.co.uk/a-new-security-header-referrer-policy/.

Der Header Referrer Policy ist der Schlüssel hinter einem solchen Problem. Ich hatte ein Problem mit der Referrer-URL in meiner Laravel + NGINX-Anwendung und versuchte alle möglichen Wege, um das durch den in den obigen Kommentaren erwähnten Code zu beheben (zurück, zurück, Header usw.), fand aber schließlich diesen Artikel, um mein Wissen zu erweitern, bevor ich mein Problem behebt passend.

Benutzeravatar von lofihelsinki
lofihelsinki

Es ist Sache des Clients, die Referrer-Informationen im Header der HTTP-Anforderung zu senden.

Wenn also der Client (Browser, App usw.) den Referrer nicht sendet, steht er dem Server in den Request-Headern nicht zur Verfügung. Ich schätze, die WhatsApp-App hat das Senden des Referrers deaktiviert, also gibt es keine Möglichkeit, ihn zu bekommen.

Bei einigen Browsern kann das Senden der Referrer-Informationen in den Einstellungen oder mit einer Erweiterung abgeschaltet werden. Es ist auch leicht zu fälschen curl zum Beispiel, so dass es nicht als Sicherheitsmaßnahme verwendet werden kann.

Weitere Informationen in meiner Antwort hier: https://stackoverflow.com/questions/49050268/does-document-referrer-equal-the-http-referer-header/49050494

Wenn Sie sich nicht sicher sind, welcher Client den Referrer sendet, können Sie dies einfach mit JavaScript überprüfen (Referrer wird hier anders geschrieben als der HTTP-Header, um die Verwirrung zu erhöhen):

console.log(
    document.referrer
);

1440670cookie-checkWie bekomme ich den http-Referer in Laravel?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy