如何检查请求是否为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请求的页面。
答案 0 :(得分:79)
如果您使用的是发送X-Requested-With
标题的库,那么您可以执行...
if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
// I'm AJAX!
}
答案 1 :(得分:17)
从Codeigniter 2.0开始,最好使用$this->input->is_ajax_request()
答案 2 :(得分:3)
我认为您基本上希望保护您的ajax api不被用户直接访问。您希望用户在您自己的代码(javascript等)调用时能够访问ajax api,但如果用户尝试直接命中api,则应拒绝用户访问。
如果你仍然在寻找一个完美的解决方案(HTTP_X_REQUESTED_WITH并不总是可靠的,因为你的库可能不支持这个。即使它可能被代理人剥夺,如果用户落后于其中一个)尝试使用crumbs来保护你的ajax api。 Crumbs用于流程验证,确保用户通过预定义/预先确定的流程访问api,而不是直接访问。
答案 3 :(得分:3)
在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.
}
答案 4 :(得分:1)
您可能想尝试添加/修改路径到您的{{1>,而不是检测您的请求是否是ajax请求(可以是任何HTTP动词 - GET / POST / HEAD)用于专门处理这些场景。
答案 5 :(得分:1)
在Yii中,您只需检查
if (Yii::app()->request->isAjaxRequest)
如果您使用jQuery或其他主要的JavaScript库,它的工作原理。如果您执行自定义请求,请不要忘记将X-Requested-With
HTTP标头设置为XMLHttpRequest
。
答案 6 :(得分:0)
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()
您可以在Official documentation上查看可用方法的完整列表