Ответ 1
Если вы используете библиотеку, которая отправляет заголовок X-Requested-With
, то вы можете сделать...
if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
// I'm AJAX!
}
Как проверить, является ли запрос 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="#" onclick="location.href='http://localhost/codeigniter/login_window'; return false;" 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 не всегда надежна, так как ваша библиотека может не поддерживать это. Даже если он может быть отключен прокси-серверами, попробуйте использовать crumbs, чтобы защитить ваши аймакс-апи. Крошки используются для проверки потока, которые обеспечивают доступ пользователей к 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
.