Как проверить, является ли запрос AJAX? Я использую CodeIgniter. У меня есть ссылка, которая при нажатии на нее откроет всплывающее диалоговое окно, которое выполняется через ajax, который запрашивает имя контроллера login_window()
.
//Here is the controller name: function login_window(){ // request via ajax $this->load->view("login_window"); }
//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()
Я думаю, что вы в основном ищете, чтобы защитить ваш айакс-апи от доступа напрямую от пользователей. Вы хотите, чтобы пользователи имели доступ к ajax api при вызове вашего собственного кода (javascript и т. Д.), Но пользователям следует запретить доступ, если они попытаются напрямую нажать api.
Если вы все еще ищете идеальное решение (HTTP_X_REQUESTED_WITH не всегда надежна, так как ваша библиотека может не поддерживать это. Даже если это может быть отключено прокси-серверами, если пользователь стоит за ним), попробуйте использовать крошки для защиты вашего ajax api. Крошки используются для проверки потока, которые обеспечивают доступ пользователей к api через предварительно определенный / предварительно определенный поток, а не напрямую.
В 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 или нет (какой может быть любой HTTP-глагол – GET / POST / HEAD), вы можете попробовать и добавить / изменить маршруты к вашим routes.php
для конкретной обработки этих сценариев.
В Yii вы просто проверяете
if (Yii::app()->request->isAjaxRequest)
Если вы используете jQuery или другую большую библиотеку javascript, она работает. Если вы выполняете пользовательские запросы, не забудьте установить X-Requested-With
HTTP-заголовком в XMLHttpRequest
.