¿Cómo obtener el referente http en laravel?

4 minutos de lectura

Avatar de usuario de PHPprogrammer42
PHPprogramador42

Estoy tratando de obtener el Referer de mis usuarios. Like si vienen de facebook, youtube, google o cualquier otra cosa.

Ahora he intentado algo así:

$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.

Este:

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

que:

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

Pero nada funcionó como se esperaba.

¿Alguien sabe una solución cómo puedo verificar el referente?

Lo necesito porque quiero verificar si el usuario proviene de alguna URL específica y, de ser así, quiero darle al usuario algunos “clics” adicionales para subir de rango. Algo así como un pequeño sistema de afiliados.

  • Tenga en cuenta que el remitente está sujeto a que el cliente lo anuncie con veracidad… no es confiable en un sentido “verdadero”.

    – Wally

    16 de agosto de 2017 a las 12:27

Avatar de usuario de Thibault Dumas
Thibault Dumas

Parece que esto hará lo que estás buscando:

Request::server('HTTP_REFERER').

Puede leer el Api DOC aquí:

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

  • Lo probé pero esto devuelve siempre “nulo”

    – Programador PHP42

    16 de agosto de 2017 a las 12:37

  • @ PHPprogrammer42 Entonces probablemente no se haya enviado un referente.

    – Ian

    16 de agosto de 2017 a las 12:38

  • Esto lo establece el agente de usuario. No todos los agentes de usuario configurarán esto, y algunos brindan la capacidad de modificar HTTP_REFERER como una característica. En resumen, realmente no se puede confiar.

    –Thibault Dumas

    16 de agosto de 2017 a las 12:43

  • mhh… entonces, ¿qué harías para verificar si el usuario hizo clic en un enlace como: “mywebsite.com/unicornio/1111111 — ¿Sin venir de mi propio sitio web? Entonces puedo darle al “hilo” con la identificación 1111111 algunos clics adicionales

    – Programador PHP42

    16 de agosto de 2017 a las 12:48


  • 404 en el enlace, aquí está el bueno: laravel.com/api/8.x/Illuminate/Http/Request.html#method_server

    – Romain ‘Maz’ BILLOIR

    9 mayo 2021 a las 20:48

Avatar de usuario de Rejneesh
Rejneesh

Laravel forma de obtener referencia:

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

Avatar de usuario de Pierre Arnissolle
pierre arnissolle

Puedes usar el request() ayudante:

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

o el Request fachada:

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

La razón por la que obtienes Undefined index: HTTP_REFERER es porque no todas las solicitudes tienen un HTTP_REFERER encabezado, solo la mayoría de las solicitudes que provienen de otros sitios web. Si visita un sitio web directamente con la URL, no enviará un HTTP_REFERER encabezamiento.

Por lo tanto, debe verificar si el encabezado está configurado primero.

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

Avatar de usuario de LucianDex
Lucian Dex

Podemos usar el ayudante url()

url()->previous();

Si desea volver a la página que inicializó la solicitud, simplemente escribimos esto (generalmente en el controlador):

return redirect()->back();

Avatar de usuario de Syed Mobarak
Syed Mobarak

Espero que este mensaje lo encuentre feliz con su código. Sin embargo, si tiene algún problema con la URL de referencia, probablemente debería leer este artículo https://scotthelme.co.uk/a-new-security-header-referrer-policy/.

El encabezado de la política de referencia es la clave detrás de este problema. He tenido problemas con la URL de referencia en mi aplicación Laravel + NGINX y probé todas las formas posibles de solucionarlo mediante el código mencionado en los comentarios anteriores (atrás, anterior, encabezado, etc.) pero finalmente encontré este artículo para enriquecer mi conocimiento antes de solucionar mi problema adecuadamente.

avatar de usuario de lofihelsinki
lofihelsinki

Depende del cliente enviar la información de referencia en el encabezado de la solicitud HTTP.

Entonces, si el cliente (navegador, aplicación, etc.) no envía la referencia, no estará disponible para el servidor en los encabezados de solicitud. Supongo que la aplicación WhatsApp ha deshabilitado el envío de la referencia, por lo que no hay forma de obtenerlo.

En algunos navegadores, el envío de la información de referencia se puede desactivar en la configuración o con una extensión. También se falsifica fácilmente con curl por ejemplo, por lo que no se puede confiar en ella como medida de seguridad.

Más información en mi respuesta aquí: https://stackoverflow.com/questions/49050268/does-document-referrer-equal-the-http-referer-header/49050494

Si no está seguro de que el cliente envíe la referencia, es fácil verificarlo con JavaScript (la referencia se escribe aquí de manera diferente al encabezado HTTP, para aumentar la confusión):

console.log(
    document.referrer
);

¿Ha sido útil esta solución?