Как мне проверить, сделан ли запрос через AJAX в CodeIgniter? - PullRequest
31 голосов
/ 29 ноября 2010

Как мне проверить, является ли запрос 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="http://localhost/codeigniter/login_window" rel="dialog">Login</a>

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

Ответы [ 6 ]

79 голосов
/ 29 ноября 2010

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

if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
   // I'm AJAX!
}
17 голосов
/ 20 августа 2012

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

3 голосов
/ 06 марта 2015

В 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.
}
3 голосов
/ 29 ноября 2010

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

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

1 голос
/ 02 октября 2014

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

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

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

1 голос
/ 29 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...