Obter referenciador de URL original com PHP?

110

Estou usando $_SERVER['HTTP_REFERER'];para obter o URL de referência. Funciona conforme o esperado até que o usuário clique em outra página e o referenciador mude para a última página.

Como faço para armazenar o URL de referência original?

Keith Donegan
fonte

Respostas:

137

Armazene-o em um cookie (se for aceitável para sua situação) ou em uma variável de sessão.

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
Sampson
fonte
13
Observe o conselho de @pcp na resposta abaixo!
d -_- b
6
Observe que você também deve verificar se http_refererexiste, o que geralmente não ocorre, o que poderia causar um erro de "Índice indefinido".
Justin
17

Como Johnathan sugeriu, você pode querer salvá-lo em um cookie ou em uma sessão.

A maneira mais fácil seria usar uma variável de sessão.

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

Coloque isso no topo da página, e você sempre poderá acessar o primeiro referenciador pelo qual o visitante do site foi direcionado.

Tyler Carter
fonte
4

Armazene-o em um cookie que dura apenas a sessão de navegação atual

Matt
fonte
4

Usar o Cookie como repositório da página de referência é muito melhor na maioria dos casos, pois os cookies manterão o referenciador até que o navegador seja fechado (e o manterão mesmo se a guia do navegador for fechada), portanto, no caso de o usuário deixar a página aberta, digamos antes do fim de semana, e devolvido depois de alguns dias, sua sessão provavelmente expirará, mas os cookies ainda estarão lá.

Coloque esse código no início de uma página (antes de qualquer saída html, pois os cookies serão configurados corretamente apenas antes de qualquer eco / impressão):

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

Então você pode acessá-lo mais tarde:

$var = $_COOKIE['origin_ref'];

E além do que @pcp sugeriu sobre o escape de $ _SERVER ['HTTP_REFERER'], ao usar o cookie, você também pode querer escapar $ _COOKIE ['origin_ref'] em cada solicitação.

Kainax
fonte
-4

tente isso

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
user11688571
fonte
Trata-se de obter, IP ADDRESSmas a postagem é sobre a REFERERpágina da web que levou à questão em questão.
Sanxofon