簡體   English   中英

如何檢查請求是否是通過 CodeIgniter 中的 AJAX 發出的?

[英]How do I check if the request is made via AJAX in CodeIgniter?

如何檢查請求是否為 AJAX? 我正在使用 CodeIgniter。 我有一個鏈接,當它點擊時,它會打開彈出對話框窗口,這是通過 ajax 完成的,它請求控制器名稱login_window()

代碼點火器

//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>

我想檢查它是否是 AJAX 請求,如果不是,我會將它們重定向到主頁。 所以他們無法訪問僅用於 ajax 請求的頁面。

如果您使用的是發送X-Requested-With標頭的庫,那么您可以執行...

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

從 Codeigniter 2.0 開始,最好使用$this->input->is_ajax_request()

在 Codeigniter 中,我們可以使用

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

我認為您基本上是希望保護您的 ajax api 不被用戶直接訪問。 您希望用戶在被您自己的代碼(javascript 等)調用時能夠訪問 ajax api,但是如果用戶嘗試直接點擊 api,則應該拒絕他們訪問。

如果您仍在尋找完美的解決方案(HTTP_X_REQUESTED_WITH 並不總是可靠的,因為您的庫可能不支持這一點。如果用戶落后,即使它可能會被代理剝離)嘗試使用crumbs來保護您的 ajax api。 Crumbs 用於流驗證,確保用戶通過預定義/預先確定的流而不是直接訪問 api。

在 Yii 中,您只需檢查

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

如果您使用 jQuery 或其他主要的 javascript 庫,它可以工作。 如果您進行自定義請求,請不要忘記將X-Requested-With HTTP 標頭設置為XMLHttpRequest

而不是檢測您的請求是否是 ajax 請求(可以是任何 HTTP 動詞 - GET/POST/HEAD),您可能想嘗試添加/修改路由到您的routes.php以專門處理這些場景。

Codeigniter 具有內置函數來檢查請求是否是使用 Ajax 調用發出的。

您可以使用以下方法來驗證是否使用 Ajax 調用controller/segment

<?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();
     }

  }

}

您還可以使用input類使用許多其他檢查。 他們中很少有人是

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

您可以在官方文檔中查看可用方法的完整列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM