2012-03-22 17 views
8

Tengo una página que carga otras páginas a través de Ajax (piense en marcos, excepto sin los marcos).Cómo saber si una página se está llamando a través de Ajax, o por su cuenta

Obviamente, estas páginas se pueden llamar de forma independiente, por lo que quiero detectar si se están llamando a través del Ajax, y si no, redirigir a la página principal de Ajax.

Las páginas son páginas php, así que también tengo acceso a eso.

índice:

goto = "StandalonePrograms.php"; 
    var clear = "<br style='clear:both;'>" 
    if(goto != ''){ 
     $.ajax({ 
      url: goto, 
      context: document.body, 
      success: function(data){ 
       $('#mainwindow').html(data + clear); 
       $('#mainwindow').find("script").each(function(i){ 
        eval($(this).text()); 
       }); 
      } 
     }); 
    } 
+0

http://stackoverflow.com/questions/3696650/how-to-detect-if-file-is-being-accessed-or-requited see la respuesta seleccionada –

+0

Have la solicitud AJAX llama a la página con una cadena de consulta especial. No es infalible, pero podría ser lo suficientemente bueno. – Blazemonger

+0

posible duplicado de [¿Cómo puedo verificar si la solicitud se realiza a través de AJAX con PHP?] (Http://stackoverflow.com/questions/4301150/how-do-i-check-if-the-request-is-made -via-ajax-with-php) –

Respuesta

12

navegadores modernos añaden la siguiente cabecera de la solicitud, cuando la solicitud se realiza mediante el XMLHttpRequest objeto:

X-Requested-With: XMLHttpRequest 

En PHP, comprobar la existencia de esta cabecera usando:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
+3

Para PHP específicamente, puede marcar '$ _SERVER ['HTTP_X_REQUESTED_WITH']'. –

+0

Esto no funciona con PHP 7.1.11 ni con el último navegador Chrome, a partir del 18 de enero – Mawg

-1

Nunca puede confiar en los clientes y sus mensajes inf ¡ormación! Los encabezados pueden ser falsificados por hackers (por ejemplo, con cURL) e incluso HTTP_X_REQUESTED_WITH no es confiable. no hay una forma 100% confiable de saber eso. La única manera es usando captcha ...

Cuestiones relacionadas