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

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

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

Ответ 1

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

session_start();

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

Ответ 2

И не забудьте выйти $_SERVER["HTTP_REFERER"] со своего обычного вектора атаки для веб-приложений.

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

Использование Cookie в качестве репозитория ссылочной страницы в большинстве случаев намного лучше, так как файлы 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'] для каждого запроса.

Ответ 6

попробуй это

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)