Единственная проблема с несколькими из приведенных выше ответов заключается в том, что токен csrf действителен только для одного запроса, поэтому, если вы отправляете пост-запрос через ajax и не обновляете страницу, у вас не будет текущего токена csrf для вашего запроса. следующий запрос ajax. Это мое решение:
В вашем контроллере CodeIgniter:
$data = array('data'=> 'data to send back to browser');
$csrf = $this->security->get_csrf_hash();
$this->output
->set_content_type('application/json')
->set_output(json_encode(array('data' => $data, 'csrf' => $csrf)));
$ data = данные для возврата в браузер
$ csrf = новый токен csrf, который будет использоваться браузером для следующего пост-запроса ajax
Очевидно, что вы можете выводить это другими способами, но JSON используется в основном с вызовами ajax. Также включайте этот токен в каждый пост-ответ, который будет использоваться для следующего пост-запроса
Тогда в вашем следующем ajax-запросе (javascript):
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 );
}
});
Также помните, что там, где у меня есть csrf_token:token
, замените crf_token
именем вашего токена, найденного в файле application / config / config.php, в котором указано $config['csrf_token_name'] = 'csrf_token';