112 votes

Obtenir l'URL de référence originale 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 change pour la dernière page.

Comment puis-je stocker l'URL de référence originale ?

139voto

Jonathan Sampson Points 121800

Stockez-le soit dans un cookie (si cela est acceptable pour votre situation), soit dans une variable de session.

session_start();

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

13 votes

Veuillez noter le conseil de @pcp dans la réponse ci-dessous !

6 votes

Notez que vous devez également vérifier si http_referer existe, comme c'est souvent le cas, ce qui pourrait provoquer une erreur "Undefined index".

69voto

pcp Points 1093

Et n'oubliez pas de vous échapper $_SERVER["HTTP_REFERER"] car c'est un vecteur d'attaque commun pour les applications web.

17voto

Tyler Carter Points 30030

Comme Johnathan l'a suggéré, vous voudriez soit l'enregistrer dans un cookie, soit dans 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'];
}

Placez 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é.

4voto

Matt Points 21690

Le stocker dans un cookie qui ne dure que le temps de la session de navigation en cours.

4voto

Kainax Points 970

L'utilisation des cookies comme référentiel de la page de référence est bien meilleure dans la plupart des cas, car les cookies conserveront le référentiel jusqu'à la fermeture du navigateur (et le conserveront même si l'onglet du navigateur est fermé). Ainsi, si l'utilisateur a laissé la page ouverte, disons avant les week-ends, et qu'il y revient après quelques jours, votre session aura probablement expiré, mais les cookies seront toujours là.

Placez 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']);
}

Vous pourrez alors y accéder plus tard :

$var = $_COOKIE['origin_ref'];

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X