Альтернатива для переменной $ _SERVER ['HTTP_REFERER'] PHP в MSIE - PullRequest
14 голосов
/ 19 октября 2010

Я использовал переменную $_SERVER['HTTP_REFERER'] в своем приложении (использовал PHP). На Firefox выше перечисленные переменные работают. Но я заметил, что $_SERVER['HTTP_REFERER'] не работает в Microsoft Internet Explorer 8. Я также узнал, что переменная HTTP_REFERER не работает на MSIE8 и MSIE7.

Пожалуйста, дайте мне ваши предложения, как использовать переменную $_SERVER['HTTP_REFERER'], чтобы избавиться от MSIE7 / 8, или есть ли другая альтернатива для $_SERVER['HTTP_REFERER'] переменной

Спасибо за ваше предложение.

-Pravin.

Ответы [ 2 ]

25 голосов
/ 22 февраля 2011

Если вам нужно только использовать информацию о реферере для своего веб-сайта (т. Е. Между страницами вашего сайта, а не снаружи), вы можете вручную отслеживать информацию о реферере пользователя.

// Get the full URL of the current page
function current_page_url(){
    $page_url   = 'http';
    if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){
        $page_url .= 's';
    }
    return $page_url.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
}

/* (Assuming session already started) */
if(isset($_SESSION['referrer'])){
    // Get existing referrer
    $referrer   = $_SESSION['referrer'];

} elseif(isset($_SERVER['HTTP_REFERER'])){
    // Use given referrer
    $referrer   = $_SERVER['HTTP_REFERER'];

} else {
    // No referrer
}

// Save current page as next page's referrer
$_SESSION['referrer']   = current_page_url();

Тогда, чтобы получить доступ к рефереру, просто используйте переменную $referrer.

if(isset($referrer)){
    echo 'Referred from "'.$referrer.'"';
    echo '<a href="'.$referrer.'">Back</a>';
} else {
    echo 'No referrer';
}

Таким образом, если пользователь заходит на http://www.example.com/page_1.php, он увидит информацию о реферере, если его предоставил браузер, иначе реферера нет,Затем, когда они посещают http://www.example.com/page_2.php и любые последующие страницы вашего сайта, реферер будет доступен.

1 голос
/ 14 февраля 2016

Пожалуйста, не используйте сессию, чтобы угадать реферала .Это приведет к нежелательному поведению и странным ошибкам.

Если вам действительно нужно знать ссылающуюся страницу, передайте ее через параметр запроса.Вы можете добавить параметр с помощью скрипта JS или на стороне сервера.

Вариант jQuery для всех ссылок на странице:

$(document).ready(function(){
    $('a').on('click', function(e) {
        url = this.getAttribute('href');
        // Check if the page is internal.
        if (url.charAt(0) != '/') {
            return;
        }
        e.preventDefault();
        // Append referrer.
        url += url.indexOf('?') === -1 ? '?' : '&';
        url += 'referer=' + encodeURIComponent(document.URL);
        window.location = url;
    });
});
...