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?

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"];

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.


4

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


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.


-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']
    )
)

Trata-se de obter, IP ADDRESSmas a postagem é sobre a REFERERpágina da web que levou à questão em questão.
Sanxofon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.