代码点火器3中禁止POST url 403


POST url 403 forbidden in Codeigniter 3

嗨,专家们,你能给我一个建议吗?为什么我的代码点火器目前在本地主机上运行,却禁止使用这个403。

403禁止


过程如下:

  • 我使用ajax来轻松、顺利地访问和检索从模型、控制器到视图的数据。下图是我在视图到控制器中的代码。

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

    &时代;新问题模式函数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' ); 
}

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


<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将其更改为question。即使您将$config[csrf-protection]设置为TRUE,这也会起作用;或$config[csrf_generate]=TRUE;这是我最新的答案。

如在文档中尝试在Config文件中设置

$config['csrf_regenerate'] = FALSE;

试试这个:

$.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:部分。

这里有几个问题。首先发送一个键为"name"、值为"question_header"的参数,然后通过其值而不是名称引用输入参数。这不会解决问题,但却是第一个错误。

其次,在控制器方法中,显示一些JSON数据,然后调用redirect。这可能导致您的错误。如果你在这里推送重定向,你将只重定向AJAX调用,而不是浏览器渲染的页面。

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