【问题标题】:Way to tell if a post came from an ajax call in codeigniter?判断帖子是否来自codeigniter中的ajax调用的方法?
【发布时间】:2010-12-19 06:18:36
【问题描述】:

我在使用 Zend 一段时间后才开始使用 CodeIgniter。我的新站点有一个功能,您可以通过 Ajax 进行注册。在 Zend 中,我可以使用它来检查传入的 POST 是否通过 AJAX,因此来自我的站点:

if(!$this->getRequest()->isXMLHttpRequest())

CodeIgniter 中是否有一段代码可以做同样的事情?如果我不确定这是一个 AJAX 调用,理论上有人可以通过创建一个发布到我的控制器的表单来注册他们想要的任何内容。

谢谢!

【问题讨论】:

  • 如果您担心有人从另一个网站发布某些内容,那么您的处理程序是否是 AJAX 没有区别。使用 CAPTCHA 和服务器端身份验证(例如,将隐藏变量传递给表单提交时检查的表单)来控制 POST 请求。
  • 他们不能只使用萤火虫来查看变量并自己包含它吗?
  • 如果你问的是隐藏变量,你是对的。您可以使用 Firebug、cURL 或数百种其他方法来传递您想要的任何 POST 数据。您想要做的是向用户发送一些对该用户/会话/时间唯一并存储在数据库中的隐藏数据。提交表单后,您可以对照数据库检查传递给您的隐藏字段。
  • 好的,有道理。我一直认为您不能在自己的域之外发送 Ajax 调用。这不是真的吗?
  • 你不能,但你总是可以欺骗标题让它看起来像你做的那样。

标签: ajax codeigniter post


【解决方案1】:

从 CodeIgniter 2.0 开始,有一种更简单的方法来检查 ajax 请求。

使用:$this->input->is_ajax_request();

文档:https://codeigniter.com/user_guide/libraries/input.html

【讨论】:

    【解决方案2】:
    if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {}
    

    但是由于您使用的是 codeigniter,因此最好使用它们的输入类。请参阅下面的操作方法。

     if($this->input->is_ajax_request()){
         //Execute Your Code
     }
    

    【讨论】:

    • 您的解决方案是正确的,但它不是在 CodeIgniter 中完成的方式。
    【解决方案3】:

    你可以用

    查看
    $this->input->is_ajax_request();
    

    【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多