Получить оригинальный URL referer с PHP?

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

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

4 ответа

Решение

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

session_start();

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

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

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

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

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

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

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

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

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

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

$var = $_COOKIE['origin_ref'];

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

Попробуй это

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
Другие вопросы по тегам