13

Ho usato la variabile $_SERVER['HTTP_REFERER'] nella mia applicazione (PHP usato). Su Firefox sopra le variabili sta funzionando. Ma ho osservato che $_SERVER['HTTP_REFERER'] non funziona su Microsoft Internet Explorer 8. Ho anche saputo che la variabile HTTP_REFERER non funziona su MSIE8 e MSIE7.

favore datemi i vostri suggerimenti, come utilizzare $_SERVER['HTTP_REFERER'] variabile per sbarazzarsi sulla MSIE7/8 o c'è qualche altra alternativa per $_SERVER['HTTP_REFERER'] variabili

Grazie per il suggerimento.

-Piano.

+3

possibile duplicato del [referer e IE7 e IE8] (http://stackoverflow.com/questions/2460490/http-referrer-and-ie7 -e-ie8) –

+0

http://bytes.com/topic/php/answers/853533-http_referer-alternative –

+1

@Col: grazie per il tuo suggerimento, c'è qualche alternativa per HTTP_REFERER? – pravin

risposta

25

Se è necessario utilizzare le informazioni del referrer internamente per il proprio sito Web (ad esempio: tra le pagine del sito Web, non esternamente), è possibile tenere traccia manualmente delle informazioni di referrer di un utente.

// 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(); 

Poi, per accedere al referrer, basta usare la variabile $referrer.

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

questo modo, se un utente visita http://www.example.com/page_1.php, vedranno le informazioni referrer se il loro browser ha fornito, altrimenti no referrer. Quindi quando visitano http://www.example.com/page_2.php e qualsiasi pagina successiva del tuo sito, il referrer sarà accessibile.

+2

Approccio pessimo. Ciò causerà un comportamento strano/errato nella sessione multitab/multiwindow e nella pagina cache. – raacer

1

Si prega di non utilizzare la sessione per indovinare il referrer. Ciò porterà a comportamenti indesiderati e strani errori.

Se è davvero necessario conoscere la pagina di riferimento, passarla tramite parametro di richiesta. È possibile aggiungere il parametro con lo script JS o sul lato server.

jQuery variante per tutti i link sulla pagina:

$(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; 
    }); 
}); 
+0

Potrebbe per favore dare un esempio di comportamento indesiderato o errore strano? –

+0

@AndreChenier Si verifica quando l'utente utilizza il sito in più finestre. Se l'utente apre una pagina in seconda finestra, ritorna alla prima finestra e fa clic sul pulsante Indietro, può reindirizzare la pagina che ha aperto nella seconda finestra, che probabilmente non è ciò che desidera o può aspettarsi dal tuo sito . – raacer

+0

Tali situazioni generano anche errori quando un programmatore si collega in modalità finestra singola. Anche le pagine memorizzate nella cache possono produrre effetti molto simili. – raacer

Problemi correlati