簡體   English   中英

Ajax CSRF 403禁止codeigniter

[英]Ajax CSRF 403 forbidden codeigniter

您好我正在調用控制器在我的基於codeigniter的應用程序中使用AJF獲取部分,該應用程序具有CSRF啟用功能

我的ajax代碼

    $('#classes').change(function(){  
  $classes=$(this).val();
            $.ajax({
             type:"POST",
             data:{
                 '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
                 'class':$classes
             },
             url:"<?php echo base_url();?>index.php/admin/getsection/"+$classes,
             success:function(return_data)
             {
                //alert(return_data);
                $('#section').html('');
                $('#section').html(return_data);
                $('#section').val(section);
             }
    });

當我第一次調用ajax函數時,它會運行完美。 但是當我再次運行相同的功能時,它將返回403禁止的錯誤。

請告訴我的工作

來自文檔

標記可以在每次提交時重新生成(默認),也可以在CSRF cookie的整個生命周期內保持相同。 標記的默認重新生成提供更嚴格的安全性,但可能導致可用性問題,因為其他標記變得無效(后退/前進導航,多個選項卡/窗口, 異步操作等)。 您可以通過編輯以下配置參數來更改此行為

 $config['csrf_regenerate'] = TRUE; 

將其設置為FALSE。

ur controller should be like this 

 function reply(){       
        $insert = $this->Message_model->send_message2();
        $csrf = $this->security->get_csrf_hash();
if($this->input->is_ajax_request())
{
   header("Content-type: application/json; charset=utf-8");
echo json_encode(array("data" => $insert,'csrf'=> $csrf)); 
}




ur jquery should be this way

var token = data.csrf;

$.ajax({
    url: '/next/ajax/request/url',
    type: 'POST',
    data: { new_data: 'new data to send via post', csrf_token:token },
    cache: false,
    success: function(data, textStatus, jqXHR) {
        // Get new csrf token for next ajax post
        var new_csrf_token = data.csrf     
       //Do something with data returned from post request
    },
    error: function(jqXHR, textStatus, errorThrown) {
      // Handle errors here
      console.log('ERRORS: ' + textStatus + ' - ' + errorThrown );
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM