Подтвердить что ты не робот

Как проверить, выполняется ли запрос через AJAX в CodeIgniter?

Как проверить, является ли запрос AJAX? Я использую CodeIgniter. У меня есть ссылка, которая, когда она щелкнула, откроет всплывающее диалоговое окно, которое выполняется через ajax, который запрашивает имя контроллера 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="#" onclick="location.href='http://localhost/codeigniter/login_window'; return false;" rel="dialog">Login</a>

Я хочу проверить, является ли это AJAX-запрос, а если нет, я перенаправляю их на главную страницу. поэтому нет доступа к странице, предназначенной только для запросов ajax.

4b9b3361

Ответ 1

Если вы используете библиотеку, которая отправляет заголовок X-Requested-With, то вы можете сделать...

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

Ответ 2

Начиная с Codeigniter 2.0, рекомендуется использовать $this->input->is_ajax_request()

Ответ 3

Я думаю, что вы в основном ищете, чтобы защитить ваш айакс-апи от доступа непосредственно пользователей. Вы хотите, чтобы пользователи имели доступ к ajax api при вызове вашего собственного кода (javascript и т.д.), Но пользователям следует запретить доступ, если они попытаются напрямую нажать api.

Если вы все еще ищете идеальное решение (HTTP_X_REQUESTED_WITH не всегда надежна, так как ваша библиотека может не поддерживать это. Даже если он может быть отключен прокси-серверами, попробуйте использовать crumbs, чтобы защитить ваши аймакс-апи. Крошки используются для проверки потока, которые обеспечивают доступ пользователей к api через предварительно определенный/предварительно определенный поток, а не напрямую.

Ответ 4

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

Ответ 5

Вместо того, чтобы определить, был ли ваш запрос запросом ajax или нет (какой может быть любой HTTP-глагол - GET/POST/HEAD), вы можете попробовать и добавить/изменить маршруты на routes.php для конкретной обработки этих сценариев.

Ответ 6

В Yii вы просто проверяете

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

Если вы используете jQuery или другую основную библиотеку javascript, он работает. Если вы выполняете пользовательские запросы, не забудьте указать X-Requested-With HTTP-заголовок на XMLHttpRequest.