31 Stimmen

Wie prüfe ich, ob die Anfrage über AJAX in CodeIgniter erfolgt?

Wie prüfe ich, ob es sich bei der Anfrage um eine AJAX-Anfrage handelt? Ich verwende CodeIgniter. Ich habe einen Link, dass, wenn es geklickt, es wird das Pop-up-Dialogfenster öffnen dies durch AJAX es Anfragen an einen Controller-Namen getan ist login_window() .

CodeIgniter

//Here is the controller name:
function login_window(){
    // request via ajax
    $this->load->view("login_window");
}

jQuery

//here is the jquery code:
//I am using a jquery plugin FACEBOX

$('a[rel*=dialog]').facebox();

<a href="http://localhost/codeigniter/login_window" rel="dialog">Login</a>

Ich möchte überprüfen, ob es eine AJAX-Anfrage ist und wenn nicht, werde ich sie auf die Homepage umleiten. so gibt es keine Möglichkeit, die sie auf die Seite zugreifen können, die nur für AJAX-Anfragen bestimmt ist.

79voto

alex Punkte 457905

Wenn Sie eine Bibliothek verwenden, die die X-Requested-With Kopfzeile, dann können Sie...

if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
   // I'm AJAX!
}

4 Stimmen

@prodigitalson Einfacher Stil, und ich verwende oft das Kohana-Framework, das ermutigt sie (und ich finde, es liest sich auch schöner).

0 Stimmen

Es gibt eine Fülle von schließenden Parens :)

1 Stimmen

Bitte hören Sie auf, AND/OR anstelle von &&/|| zu verwenden, das ist nicht dasselbe! Weitere Einzelheiten finden Sie in dieser Frage stackoverflow.com/q/2803321/77850

16voto

Dan F. Punkte 1343

Ab Codeigniter 2.0 wird die Verwendung von $this->input->is_ajax_request()

5 Stimmen

Ick I hassen Unterstriche in Methodennamen. Aber +1 für das Festhalten mit CodeIgniter in Ihrer Antwort für die OP.

0 Stimmen

Da die Frage sich auf CodeIgniter bezieht, ist dies die beste Antwort! Arbeitet noch mit CodeIgniter 3.0!

3voto

Abhinav Singh Punkte 2625

Ich denke, Sie sind im Grunde suchen, um Ihre ajax api's aus direkt von den Nutzern zugegriffen werden zu schützen. Sie möchten, dass Benutzer auf Ajax-Api's zugreifen können, wenn sie von Ihrem eigenen Code (Javascript usw.) aufgerufen werden, aber Benutzern sollte der Zugriff verweigert werden, wenn sie versuchen, die Api direkt zu erreichen.

Wenn Sie noch nach einer perfekten Lösung suchen (HTTP_X_REQUESTED_WITH ist nicht immer zuverlässig, da Ihre Bibliothek dies möglicherweise nicht unterstützt. Es könnte sogar von Proxies entfernt werden, wenn der Benutzer sich hinter einem Proxy befindet), versuchen Sie, Folgendes zu verwenden Krümel um Ihre Ajax-Api's zu schützen. Crumbs werden für die Flussvalidierung verwendet, die sicherstellt, dass Benutzer über einen vordefinierten/vorbestimmten Fluss und nicht direkt auf die Api zugreifen.

0 Stimmen

Es gibt auch die Idee, einen eleganten Fallback zu Ajax zu haben, wenn Javascript ausgeschaltet ist oder im Moment durch ein anderes Skript gestört wird. Diese Anfragen müssen möglicherweise html zurückgeben, anstatt das, was die Ajax-Anfrage erwartet.

3voto

aish Punkte 613

In Codeigniter können wir verwenden

if(!$this->input->is_ajax_request()){ // check if request comes from an ajax
    redirect(site_url('home'),'refresh'); // if the request is not coming from an ajax redirect to home controller.
}

1voto

Robin Maben Punkte 20864

Anstatt zu erkennen, ob Ihre Anfrage eine Ajax-Anfrage war oder nicht (was ein beliebiges HTTP-Verb sein kann - GET/POST/HEAD), können Sie versuchen, und Hinzufügen/Ändern von Routen zu Ihrem routes.php für den speziellen Umgang mit diesen Szenarien.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X