CI框架中开启了csrf_protection后,表单以及ajax传输都要带上一個token的值

如果打开这个功能的话

post表单,提交给server 后报错: Error 500

An Error Was Encountered

The action you have requested is not allowed.

可以在application/config/config.php中找到下面这一行

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;

原本$config[‘csrf_protection’]把false改成true就可以打开

打开之后会自动帮你再cookie中存一个值

cookie的name可以再config.php中设定

之后传送表单就要连这个token一起传才行

一下是jquery的ajax功能示例

$(function(){
    $('#btn').click(function(){
        $.ajax({
            type:'POST'
            ,url:'/ajax' //ajax接收的server端
            ,data:$('#form').serialize()+'&csrf_test_name='+ getCookie('csrf_test_name')
            ,success:function(data){
            alert(data.msg);
            }
            ,dataType:'json'
        });
    });
});
 
function getCookie(name){
    var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
    if(arr != null) return unescape(arr[2]); return null;
}

csrf_test_name就是config.php中可以设定的参数

表单中隐藏域实例:

 

你可能感兴趣的:(php,CI)