web-dev-qa-db-fra.com

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

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 renvoi d'origine?

105
Keith Donegan

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

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
130
Sampson

Comme suggéré par Johnathan, vous souhaitez 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é.

17
Tyler Carter

Utiliser un cookie en tant que référentiel de page de référence est bien meilleur dans la plupart des cas, car les cookies garderont le référent jusqu'à la fermeture du navigateur (et le resteront même si l'onglet du navigateur est fermé), donc au cas où l'utilisateur laisserait la page ouverte, avant les week-ends, et y revenez après quelques jours, votre session sera probablement expirée, mais les cookies seront toujours là.

Placez ce code au début de la page (avant toute sortie HTML, car les cookies ne seront correctement configurés 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 demande.

4
Kainax

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

4
Matt

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