Codeigniter CSRF действителен только для одного запроса ajax

Я хочу загрузить изображение на сервер при событии изменения jquery, но используя codeigniter csrf, я могу только один раз загружать изображение, как я могу загружать изображения с помощью ajax для нескольких запросов. имейте в виду, когда я устанавливаю это

config['csrf_protection'] = FALSE; 

то я могу отправить несколько запросов onchange jquery, но когда csrf_protection будет false, я думаю, что нет преимущества csrf. поэтому вопрос заключается в том, как я могу отправить несколько запросов с помощью ajax, пока разрешена csrf_protection. Мой код jquery следующий

 ("#avatar").change(function(){ var link = $("#avatar").val(); $.ajax({ url : "<?php echo base_url('main/test'); ?>", type: 'post', data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',"id":"hello","link":link}, success : function(data) { alert(data); } }); }); 

На мой взгляд, вы должны попытаться воссоздать токен csrf каждый запрос

Попробуйте этот пример кода …

Для js funcion

 var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>', csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>'; ("#avatar").change(function(){ var link = $("#avatar").val(); $.ajax({ url : "<?php echo base_url('main/test'); ?>", type: 'post', data: {csrfName:csrfHash,"id":"hello","link":link}, success : function(data) { csrfName = data.csrfName; csrfHash = data.csrfHash; alert(data.message); } }); }); 

и для контроллера

 public function test() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = 500; $config['max_width'] = 260; $config['max_height'] = 260; $reponse = array( 'csrfName' => $this->security->get_csrf_token_name(), 'csrfHash' => $this->security->get_csrf_hash() ) $this->load->library('upload', $config); if (!$this->upload->do_upload('link')) { $reponse['message'] = "error"; } else { $data = array('upload_data' => $this->upload->data()); $image_name = $data['upload_data']['file_name']; $reponse['message'] = $image_name; } echo json_encode($reponse); } 

Дайте мне знать и удачи

Примечание. Когда кто-то попросит вас отправить больше данных на вопрос, не публикуйте его в качестве комментария или ответа, лучше отредактировать сам вопрос и добавить материал

Вы можете установить это в config.php

$ config ['csrf_regenerate'] = FALSE;

поэтому защита csrf действительна в течение всего сеанса, и это решит вашу проблему. Если вы установите $ config ['csrf_regenerate'] = true; то CI генерирует новый токен csrf для каждого запроса, поэтому ваш старый токен csrf не совпадает с новым сгенерированным токеном csrf

Все, что вам нужно сделать, это перезагрузить токен SCRF в ответе AJAX. Это так просто!