Получить исходный URL-адрес с PHP?

110

Я использую, $_SERVER['HTTP_REFERER'];чтобы получить URL-адрес ссылки. Он работает, как ожидалось, пока пользователь не щелкнет другую страницу, а реферер не перейдет на последнюю страницу.

Как сохранить исходный URL-адрес ссылки?

Кейт Донеган
источник

Ответы:

137

Сохраните его либо в файле cookie (если это приемлемо для вашей ситуации), либо в переменной сеанса.

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
Sampson
источник
13
Обратите внимание на совет @pcp в ответе ниже!
d -_- b
6
Обратите внимание, что вы также должны проверить, http_refererсуществует ли он , поскольку часто этого не происходит, что может вызвать ошибку «Неопределенный индекс».
Джастин
17

Как предложил Джонатан, вы хотите сохранить его в файле cookie или в сеансе.

Более простой способ - использовать переменную сеанса.

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

Поместите это вверху страницы, и вы всегда сможете получить доступ к первому референту, по которому был направлен посетитель сайта.

Тайлер Картер
источник
4

Сохраните его в файле cookie, который действует только в течение текущего сеанса просмотра.

Мэтт
источник
4

Использование Cookie в качестве репозитория справочной страницы в большинстве случаев намного лучше, поскольку файлы cookie будут сохранять реферер до закрытия браузера (и будут сохранять его, даже если вкладка браузера закрыта), поэтому в случае, если пользователь оставил страницу открытой, скажем до выходных и вернувшись к нему через пару дней, ваша сессия, вероятно, истечет, но файлы cookie все еще будут там.

Поместите этот код в начало страницы (перед любым выводом html, поскольку файлы cookie будут правильно установлены только перед любым echo / print):

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

Тогда вы сможете получить к нему доступ позже:

$var = $_COOKIE['origin_ref'];

И помимо того, что @pcp предложил экранировать $ _SERVER ['HTTP_REFERER'], при использовании cookie вы также можете захотеть экранировать $ _COOKIE ['origin_ref'] при каждом запросе.

Кайнакс
источник
-4

попробуй это

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
user11688571
источник
Речь идет о получении, IP ADDRESSно сообщение о REFERERвеб-странице, которая привела к той, о которой идет речь.
Санхофон