¿Obtener referencia de URL original con PHP?

110

Estoy usando $_SERVER['HTTP_REFERER'];para obtener la URL de referencia. Funciona como se esperaba hasta que el usuario hace clic en otra página y el remitente cambia a la última página.

¿Cómo almaceno la URL de referencia original?

Keith Donegan
fuente

Respuestas:

137

Guárdelo en una cookie (si es aceptable para su situación) o en una variable de sesión.

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
Sampson
fuente
13
¡Tenga en cuenta el consejo de @pcp en la respuesta a continuación!
d -_- b
6
Tenga en cuenta que también debe verificar si http_refererexiste, ya que a menudo no lo hace, lo que podría causar un error de "Índice no definido".
Justin
17

Como sugirió Johnathan, querrá guardarlo en una cookie o en una sesión.

La forma más sencilla sería utilizar una variable de sesión.

session_start();
if(!isset($_SESSION['org_referer']))
{
    $_SESSION['org_referer'] = $_SERVER['HTTP_REFERER'];
}

Ponlo en la parte superior de la página, y siempre podrás acceder al primer referente por el que se dirigió el visitante del sitio.

Tyler Carter
fuente
4

Almacenarlo en una cookie que solo dura la sesión de navegación actual

Mate
fuente
4

Usar Cookie como un repositorio de la página de referencia es mucho mejor en la mayoría de los casos, ya que las cookies mantendrán la referencia hasta que se cierre el navegador (y la mantendrán incluso si la pestaña del navegador está cerrada), así que en caso de que el usuario dejara la página abierta, digamos antes de los fines de semana y después de un par de días, su sesión probablemente caducará, pero las cookies seguirán allí.

Coloque ese código al comienzo de una página (antes de cualquier salida html, ya que las cookies se configurarán correctamente solo antes de cualquier eco / impresión):

if(!isset($_COOKIE['origin_ref']))
{
    setcookie('origin_ref', $_SERVER['HTTP_REFERER']);
}

Entonces puedes acceder a él más tarde:

$var = $_COOKIE['origin_ref'];

Y además de lo que @pcp sugirió sobre cómo escapar de $ _SERVER ['HTTP_REFERER'], cuando use cookies, también puede querer escapar de $ _COOKIE ['origin_ref'] en cada solicitud.

Kainax
fuente
-4

prueba esto

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
usuario11688571
fuente
Se trata de obtener, IP ADDRESSpero la publicación trata de REFERERla página web que condujo a la en cuestión.
Sanxofon