web-dev-qa-db-fra.com

Comment vérifier si la demande est effectuée via AJAX dans CodeIgniter?

Comment vérifier si la demande est un AJAX? J'utilise CodeIgniter. J'ai un lien qui, lorsqu'il a cliqué, ouvrira la fenêtre de dialogue contextuelle, cela se fait via ajax, il demande à un nom de contrôleur 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>

Je veux vérifier s'il s'agit d'une demande AJAX et sinon, je vais les rediriger vers la page d'accueil. Il n'y a donc aucun moyen d'accéder à la page qui est uniquement destinée aux demandes ajax.

31
jameserie

Si vous utilisez une bibliothèque qui envoie le X-Requested-With en-tête, alors vous pouvez faire ...

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

Depuis Codeigniter 2.0, il est préférable d'utiliser $this->input->is_ajax_request()

17
Dan F.

Je pense que vous cherchez essentiellement à protéger vos API ajax contre l'accès direct par les utilisateurs. Vous voulez que les utilisateurs puissent accéder aux api ajax lorsqu'ils sont invoqués par votre propre code (javascript, etc.) mais les utilisateurs doivent se voir refuser l'accès s'ils essaient de toucher directement l'api.

Si vous êtes toujours à la recherche d'une solution parfaite (HTTP_X_REQUESTED_WITH n'est pas toujours fiable, car votre bibliothèque pourrait ne pas le prendre en charge. Même elle pourrait être supprimée par des mandataires si l'utilisateur est derrière un) essayez d'utiliser miettes pour protéger vos api ajax. Les miettes sont utilisées pour la validation du flux, ce qui garantit que les utilisateurs accèdent aux API via un flux prédéfini/prédéterminé et non directement.

3
Abhinav Singh

Dans Codeigniter, nous pouvons utiliser

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.
}
3
aish

Au lieu de détecter si votre demande était une demande ajax ou non (qui peut être n'importe quel verbe HTTP - GET/POST/HEAD), vous pouvez essayer et ajouter/modifier des routes à votre routes.php pour gérer spécifiquement ces scénarios.

1
Robin Maben

Dans Yii vous cochez simplement

    if (Yii::app()->request->isAjaxRequest)

Si vous utilisez jQuery ou une autre bibliothèque javascript majeure, cela fonctionne. Si vous faites des demandes personnalisées, n'oubliez pas de définir X-Requested-With En-tête HTTP vers XMLHttpRequest.

1
Fancy John

Codeigniter a une fonction intégrée pour vérifier si la demande est faite en utilisant l'appel Ajax.

Vous pouvez utiliser la méthode suivante pour valider si un controller/segment Est appelé à l'aide d'Ajax ou non.

<?php
Class Only_ajax extends CI_controller{

   function validate_user()
  {
     /*
      * Check if URL only_ajax/validate_url is called from ajax
      * if not display not found error to user.
      *
      **/

     if(!$this->input->is_ajax_request()){
       show_404();
     }

  }

}

Vous pouvez également utiliser de nombreux autres contrôles en utilisant la classe input. Peu d'entre eux sont

  • $this->input->get_request_header();
  • $this->input->is_cli_request()
  • $this->input->ip_address()

Vous pouvez voir la liste complète des méthodes disponibles sur Documentation officielle

0
Dheeraj Thedijje