Codeigniter 3禁止POST网址403

时间:2016-04-21 06:10:46

标签: php codeigniter http-status-code-403

您好专家可以给我一个建议,为什么我在我的本地主机上运行的代码点火器上禁止这个403。

403 forbidden

这个过程是这样的:

  • 我正在使用ajax轻松,顺畅地访问和检索数据,从模型,控制器到视图,下面的图像是我对控制器的视图中的代码。

    <div class="modal-header s-example-modal-sm" aria-labelledby="mySmallModalLabel">
    

    ×   新问题模式                    function question_save(){

      $.ajax({
            url : "<?php echo base_url('Mainx/insert_question_header');?>",
            crossDomain: true,
            contentType: "application/x-www-form-urlencoded",
            method: "POST",
            data: { name: 'question_header'},
            dataType: 'json',
            '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
    
            success: function(data){
                //alert('data save');
            },
            error: function (jqXHR, textStatus, errorThrown){
                alert('Error adding');
            }
        });
    }  
    

      

           

          问题标题:          

      

             

最后从我的控制器中显示我在我的视图下输入的值。

public function insert_question_header(){
    $insert_header = array(

        'question_header'=> $this->input->post("question_header")

    );
    //$this->db->insert('tb_question_header', $insert_header);
    echo json_encode($insert_header);
    redirect('Mainx/question_form/success' ); 
}

4 个答案:

答案 0 :(得分:2)

嘿,伙计们刚刚找到答案。感谢您提出的所有建议和意见。

<script type="text/javascript">

function q_header() {

  var question = document.getElementById('question').value;

  $.ajax({
     url: "<?php echo base_url('Mainx/insert_question_header');?>",
     type: "post",
     data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',"question":question},
     success: function(){
       alert("success");
     },
     error:function(){
       alert("failure");
     }
  });

}


</script>

我尝试使用这个代码而不是使用question_header我将其更改为问题。即使设置$ config [csrf_protection] = TRUE,这也可以工作;或$ config [csrf_generate] = TRUE; 这是我最新的答案。

答案 1 :(得分:0)

Docs一样尝试使用Config文件集

$config['csrf_regenerate'] = FALSE;

答案 2 :(得分:0)

试试这个:

$.ajax({
        url : "<?php echo base_url('Mainx/insert_question_header');?>",
        crossDomain: true,
        contentType: "application/x-www-form-urlencoded",
        method: "POST",
        data: { name: 'question_header', '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>' },
        dataType: 'json',
        success: function(data){
            //alert('data save');
        },
        error: function (jqXHR, textStatus, errorThrown){
            alert('Error adding');
        }
    });

所以你必须将 CSRF令牌放到data:部分。

答案 3 :(得分:0)

这里有几个问题。首先,您要发送一个带有“name”键和值“question_header”的参数,稍后您将通过其值而不是其名称来引用输入参数。这不会解决问题,但是第一个错误。

其次,在您的控制器方法中,您将显示一些JSON数据并在之后调用redirect。此可能导致您的错误。如果您在此处推送重定向,则只会重定向AJAX调用,而不会重定向浏览器呈现的页面。

如果您希望重定向访问者,则必须通过输出包含重定向数据的有效JSON通知您的AJAX响应处理程序,然后解析该JSON响应并使用JavaScript重定向。