13

Użyłem zmiennej $_SERVER['HTTP_REFERER'] w mojej aplikacji (używany PHP). W Firefox powyżej zmiennych jest wokring. Ale zauważyłem, że $_SERVER['HTTP_REFERER'] nie działa na Microsoft Internet Explorer 8. Dowiedziałem się również, że zmienna HTTP_REFERER nie działa na MSIE8 i MSIE7.

Proszę dać mi swoje propozycje, jak wykorzystać $_SERVER['HTTP_REFERER'] zmienną pozbyć na MSIE7/8 lub jest jakaś inna alternatywa dla $_SERVER['HTTP_REFERER'] zmiennych

Dzięki za sugestię.

-Pravin.

+3

możliwe duplikat [HTTP kierujących i IE7 i IE8] (http://stackoverflow.com/questions/2460490/http-referrer-and-ie7 i-ie8) –

+0

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

+1

@Col: dzięki za sugestię, czy jest jakaś alternatywa dla HTTP_REFERER? – pravin

Odpowiedz

25

Jeśli potrzebujesz wewnętrznie korzystać z informacji o stronie odsyłającej w swojej witrynie (np. Między stronami witryny, a nie zewnętrznie), możesz ręcznie śledzić informacje o stronie odsyłającej użytkownika.

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

Następnie, aby uzyskać dostęp do strony odsyłającej, wystarczy użyć zmiennej $referrer.

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

ten sposób, jeśli użytkownik odwiedza http://www.example.com/page_1.php, ujrzą informacje Gadu jeśli ich przeglądarka zapewnił go, w przeciwnym razie nie ma odnośnika zwrotnego. Następnie odwiedzając stronę http://www.example.com/page_2.php i kolejne strony Twojej witryny, strona odsyłająca będzie dostępna.

+2

Bardzo złe podejście. Spowoduje to dziwne/złe zachowanie w sesji multitab/multiwindow i na stronie z pamięci podręcznej. – raacer

1

Proszę używać nie używać sesji do odgadnięcia referrer. Doprowadzi to do niepożądanych zachowań i dziwnych błędów.

Jeśli naprawdę potrzebujesz znać stronę odsyłającą, przekaż ją za pomocą parametru żądania. Możesz dodać parametr za pomocą skryptu JS lub po stronie serwera.

jQuery wariant dla wszystkich linków na stronie:

$(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

Czy możesz podać przykład niepożądanego zachowania lub dziwnego błędu? –

+0

@AndreChenier Dzieje się, gdy użytkownik korzysta z witryny w wielu oknach. Jeśli użytkownik otworzy stronę w drugim oknie, a następnie powróci do pierwszego okna i kliknie przycisk Wstecz, może przekierować go do strony, którą otworzył w drugim oknie, co prawdopodobnie nie jest tym, czego naprawdę chce lub może oczekiwać od swojej witryny . – raacer

+0

Takie sytuacje powodują również błędy, gdy programista wykonuje ponownie tryb pojedynczego okna. Również strony z pamięci podręcznej mogą dawać bardzo podobny efekt. – raacer

Powiązane problemy