2012-03-22 8 views
8

Mam stronę, która ładuje inne strony przez Ajax (myślę o klatkach, z wyjątkiem bez ramek).Jak stwierdzić, czy strona jest wywoływana przez Ajax, czy też na własną rękę?

Oczywiście wszystkie strony można nazwać niezależnie, więc chcę wykryć, czy są one wywoływane przez Ajax, a jeśli nie, przekierować na główną stronę Ajax.

Strony to strony php, więc mam do nich dostęp również.

index:

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-orrequested zobacz wybraną odpowiedź –

+0

żądanie AJAX wywołuje stronę ze specjalnym łańcuchem zapytania. Nie jest to niezawodne, ale może być wystarczająco dobre. – Blazemonger

+0

możliwy duplikat [Jak sprawdzić, czy żądanie jest wykonane przez AJAX z PHP?] (Http://stackoverflow.com/questions/4301150/how-do-i-check-if-the-request-is-made -via-ajax-with-php) –

Odpowiedz

12

Nowoczesne przeglądarki dodać następującą prośbę nagłówek, gdy wniosek został złożony przy użyciu obiektu XMLHttpRequest:

X-Requested-With: XMLHttpRequest 

w PHP, sprawdzić istnienie tego nagłówka przy użyciu:

$_SERVER['HTTP_X_REQUESTED_WITH'] 
+3

Dla PHP w szczególności możesz sprawdzić '$ _SERVER ['HTTP_X_REQUESTED_WITH']'. –

+0

To nie działa z PHP 7.1.11 i czymkolwiek jest najnowsza przeglądarka Chrome, od 18 stycznia – Mawg

-1

Nigdy nie można ufać klientom i ich wysłanym inf ormacja! Nagłówki mogą zostać sfałszowane przez hakerów (na przykład z cURL), a nawet HTTP_X_REQUESTED_WITH nie jest wiarygodny. nie ma na to zaufania w 100%. Jedynym sposobem jest użycie captcha ...

Powiązane problemy