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

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

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


person Keith Donegan    schedule 08.12.2009    source источник


Ответы (5)


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

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
person Sampson    schedule 08.12.2009
comment
Обратите внимание на совет @pcp в ответе ниже! - person d-_-b; 10.11.2012
comment
Обратите внимание, что вы также должны проверить, существует ли http_referer, так как это часто не так, что может вызвать ошибку Undefined index. - person Justin; 26.06.2014

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

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

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

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

person Tyler Carter    schedule 08.12.2009

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

person Matt    schedule 08.12.2009

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

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

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

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

$var = $_COOKIE['origin_ref'];

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

person Kainax    schedule 08.01.2017

попробуй это

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
person user11688571    schedule 23.06.2019
comment
Речь идет о получении IP ADDRESS, но в сообщении речь идет о REFERER веб-странице, которая привела к рассматриваемой. - person Sanxofon; 16.01.2020
comment
Отвечает на другой вопрос и должен быть удален. - person s3c; 27.11.2020