Альтернатива для переменной $_SERVER ['HTTP_REFERER'] PHP в MSIE

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

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

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

-Pravin.

Ответы

Ответ 1

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

// 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 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 и любые последующие страницы вашего сайта, реферер будет доступен.

Ответ 2

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

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

Вариант 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;
    });
});