13

he utilizado $_SERVER['HTTP_REFERER'] variable en mi solicitud (PHP se utiliza). En las variables anteriores de Firefox está wokring. Pero he observado que $_SERVER['HTTP_REFERER'] no funciona en Microsoft Internet Explorer 8. también dieron a conocer que HTTP_REFERER no funciona variable sobre MSIE8 y MSIE7.

Por favor, dame tus sugerencias, cómo utilizar $_SERVER['HTTP_REFERER'] variable para deshacerse de MSIE7/8 o hay alguna otra alternativa para $_SERVER['HTTP_REFERER'] variables

Gracias por su sugerencia.

-Pravin.

+3

posible duplicado de [HTTP Referente y IE7 e IE8] (http://stackoverflow.com/questions/2460490/http-referrer-and-ie7 -y-IE8) –

+0

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

+1

@Col: gracias por su sugerencia, es una alternativa para HTTP_REFERER? – pravin

Respuesta

25

Si sólo necesita usar la información de referencia interna para su sitio web (es decir: entre las páginas de su sitio web, no desde el exterior), se puede mantener de forma manual un registro de información de referencia de un usuario.

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

Entonces, para acceder a la de referencia, sólo tiene que utilizar la variable $referrer.

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

esta manera, si un usuario visita http://www.example.com/page_1.php, verán la información de referencia, si su navegador ha proporcionado, de lo contrario ninguna referencia. Luego, cuando visiten http://www.example.com/page_2.php, y cualquier página posterior de su sitio, se podrá acceder a la referencia.

+2

Muy mal enfoque. Esto causará un comportamiento extraño/incorrecto en la sesión multitab/multiwindow y en la página almacenada en caché. – raacer

1

Por favor, No utilice la sesión para adivinar la referencia. Esto conducirá a un comportamiento no deseado y errores extraños.

Si realmente necesita saber la página de referencia, pasarla a través del parámetro de petición. Puede agregar el parámetro con el script JS o en el servidor.

variante de jQuery para todos los enlaces de la página:

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

¿Podría dar ejemplo de comportamiento no deseado o error extraño? –

+0

@AndreChenier One ocurre cuando el usuario usa el sitio en varias ventanas. Si el usuario abre una página en la segunda ventana y luego regresa a la primera ventana y hace clic en el botón Atrás, puede redirigirlo a la página que abrió en la segunda ventana, que probablemente no sea lo que realmente quiere o puede esperar de su sitio. . – raacer

+0

Tales situaciones también producen errores cuando un programador reley en el modo de ventana única. También las páginas en caché pueden producir un efecto muy similar. – raacer

Cuestiones relacionadas