我一直在尝试POST到Codeigniter控制器(启用CSRF保护时),但这会导致HTTP/1.1 500 Internal Server Error
和This action is not allowed
页面失败。
我尝试使用以下方法(我发现here)发送csrf令牌和POST数据,但它似乎不起作用。
<script type="text/javascript" src="js/libs/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="js/libs/jquery.cookie.js"></script>
<div id="display">Loading...</div>
<script type="text/javascript">
// this bit needs to be loaded on every page where an ajax POST may happen
$.ajaxSetup({
data: {
csrf_token: $.cookie('csrf_cookie')
}
});
// now you can use plain old POST requests like always
$.post('http://localhost/index.php/handler/test', { name : 'Grim'}, function(data){ $('#display').html(JSON.stringify(data)); });
这是我的Codeigniter config.php
文件:
$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_expire'] = 1800;
这是控制器:
function test()
{
echo json_encode($_POST);
}
答案 0 :(得分:0)
在发布
之前将csrf令牌添加到数据中$.ajax({
type: "POST",
url: url,
data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',/*----your data-----*/}
})
需要在每个请求中发送csrf令牌,因此需要通过上述echo语句指定