Obtenir le référent URL d'origine avec PHP?

110

j'utilise $_SERVER['HTTP_REFERER']; pour obtenir l'URL du référent. Cela fonctionne comme prévu jusqu'à ce que l'utilisateur clique sur une autre page et que le référent passe à la dernière page.

Comment stocker l'URL de référence d'origine?

Keith Donegan
la source

Réponses:

137

Stockez-le soit dans un cookie (si cela convient à votre situation), soit dans une variable de session.

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
Sampson
la source
13
Veuillez noter les conseils de @pcp dans la réponse ci-dessous!
d -_- b
6
Notez que vous devez également vérifier s'il http_refererexiste, car ce n'est souvent pas le cas, ce qui pourrait provoquer une erreur "Index non défini".
Justin le
17

Comme Johnathan l'a suggéré, vous voudrez soit l'enregistrer dans un cookie ou une session.

Le moyen le plus simple serait d'utiliser une variable de session.

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

Mettez cela en haut de la page, et vous pourrez toujours accéder au premier référent par lequel le visiteur du site a été dirigé.

Tyler Carter
la source
4

Stockez-le dans un cookie qui ne dure que pour la session de navigation en cours

Mat
la source
4

L'utilisation de Cookie comme référentiel de page de référence est bien meilleure dans la plupart des cas, car les cookies conserveront le référent jusqu'à ce que le navigateur soit fermé (et le conserveront même si l'onglet du navigateur est fermé), donc si l'utilisateur a laissé la page ouverte, disons avant le week-end, et y revenir après quelques jours, votre session sera probablement expirée, mais les cookies seront toujours là.

Mettez ce code au début d'une page (avant toute sortie html, car les cookies ne seront correctement définis qu'avant tout écho / impression):

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

Ensuite, vous pourrez y accéder plus tard:

$var = $_COOKIE['origin_ref'];

Et en plus de ce que @pcp a suggéré d'échapper à $ _SERVER ['HTTP_REFERER'], lorsque vous utilisez un cookie, vous pouvez également vouloir échapper $ _COOKIE ['origin_ref'] à chaque requête.

Kainax
la source
-4

essaye ça

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
user11688571
la source
Il s'agit d'obtenir IP ADDRESSmais le message concerneREFERER la page Web qui a conduit à celle en question.
Sanxofon le