代码之家  ›  专栏  ›  技术社区  ›  jameserie

如何检查请求是否通过CodeIgniter中的AJAX发出?

  •  31
  • jameserie  · 技术社区  · 14 年前

    如何检查请求是否为AJAX?我正在使用编码器点火器。我有一个链接,当它单击时,它将打开弹出对话框窗口这是通过ajax完成的,它请求一个控制器名称 login_window() .

    编码器

    //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 回复  |  直到 9 年前
        1
  •  79
  •   Saa    9 年前

    如果您使用的库发送 X-Requested-With 头,然后你可以。。。

    if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') {
       // I'm AJAX!
    }
    
        2
  •  17
  •   Dan F.    12 年前

    从Codeigniter 2.0开始,建议使用 $this->input->is_ajax_request()

        3
  •  3
  •   Abhinav Singh    14 年前

    我认为您基本上是在保护ajajaxapi不被用户直接访问。当您自己的代码(javascript等)调用ajax api时,您希望用户能够访问它,但是如果用户试图直接访问api,则应该拒绝他们的访问。

    如果您仍在寻找一个完美的解决方案(HTTP_X_REQUESTED_WITH并不总是可靠的,因为您的库可能不支持此功能)。即使它可能被代理剥离,如果用户在一个后面)尝试使用 crumbs 为了保护ajax api,Crumbs用于流验证,它确保用户通过预定义/预先决定的流而不是直接访问api。

        4
  •  3
  •   aish    9 年前

    我们可以使用编码器点火器

    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
  •  1
  •   Robin Maben    14 年前

    与其检测您的请求是否是ajax请求(可以是任何HTTP动词-GET/POST/HEAD),不如尝试 添加/修改路由 给你的 routes.php 专门处理这些场景。

        6
  •  1
  •   Fancy John Anton    10 年前

    在Yii你只要检查一下

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

    如果您使用jQuery或其他主要的javascript库,它可以工作。如果你做自定义请求,不要忘记设置 X-Requested-With HTTP头到 XMLHttpRequest .