2009-03-27 8 views
2

J'ai un script PHP qui redirige l'utilisateur via un code comme:PHP Redirect sans modifier en-têtes

header ('Location: http://someurl/somepage.php');

Puis, en somepage.php j'essaie d'accéder $_SERVER['HTTP_REFERER'] pour déterminer où la demande de page a viens de. Je trouve que $_SERVER['HTTP_REFERER'] est vide lorsqu'une page est appelée en utilisant la méthode d'emplacement d'en-tête.

Existe-t-il une méthode alternative que je peux utiliser pour rediriger l'utilisateur afin que je puisse toujours utiliser $_SERVER['HTTP_REFERER'] dans la page cible.

Répondre

6

Une chose que vous pouvez essayer: au lieu d'envoyer l'en-tête Location, renvoyer une page HTML avec la balise

<meta http-equiv="refresh" content="0;url=http://someurl/somepage.php"> 

dans la section <head>. Je ne suis pas sûr si cela réglerait votre problème, cependant ... cela dépend vraiment du comportement du navigateur. La valeur de $_SERVER['HTTP_REFERER'] provient de l'en-tête de demande Referer que le navigateur est libre d'envoyer ou de ne pas envoyer, à sa discrétion.

autre chose que vous pouvez faire est

header("Location: http://someurl/somepage.php?referer=http%3A%2F%2Fthisurl%2Fthispage.php"); 

qui est, envoyer l'URL de referer comme paramètre de chaîne de requête, vous pouvez y accéder en $_GET['referer']. C'est probablement plus fiable que de compter sur le navigateur pour envoyer un en-tête référent.

1

L'en-tête HTTP Referer: est défini par l'agent utilisateur et non par le serveur. Je ne suis pas sûr qu'il y ait quelque chose que vous pouvez faire pour vous assurer que vous obtenez un en-tête Referer.