Codeigniter不接受启用CSRF保护的jQuery POST

时间:2014-07-07 15:11:16

标签: php jquery ajax codeigniter

我一直在尝试POST到Codeigniter控制器(启用CSRF保护时),但这会导致HTTP/1.1 500 Internal Server ErrorThis 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);
}

1 个答案:

答案 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语句指定