一开始我为了简单起见而关闭了我的CSRF,使我的表单/ ajax工作。现在,当我打开它并尝试使用CSRF的输入和内容时,没有任何工作可行。我的表单没有提交,或者当我的整个页面刷新时,我不能让它发生。这是我目前的代码。
form method="post">
<input type="text" name="vip_text_box" id="vip" value="<?php echo $total_amount ?>"> <br><br>
<input type="submit" id="submit" value="Redeem" onclick="return rebate_amount()">
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
</form>
和AJAX:
function rebate_amount(){
var value = document.getElementById('vip').value;
var datastring = 'vip='+value;
var url = base_url + '/index.php/home/redeeming_form_value';
$.ajax({
type : 'post',
url : url,
data: datastring,
cache: false,
success: function(html){
$('#vip_point_redeeming').html(html);
}
});
return false;
}
请记住。当配置文件中的CSRF关闭时,这一切都有效。但我认为CSRF与form / ajax存在问题。
答案 0 :(得分:2)
您还应该在csrf_token
中加入数据
500内部服务器错误
您的AJAX请求构造了一个POST操作但无法提供 CSRF令牌。当CodeIgniter收到POST操作时,它无法执行 找到TOKEN并在你有机会之前关闭所有东西 运行任何代码,因此您收到500内部服务器错误
要么
data : $("#your_form").serialize();
或强>
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',
/*....your data....*/
vip:document.getElementById('vip').value
},
您的功能看起来有点
function rebate_amount(){
var url = base_url + '/index.php/home/redeeming_form_value';
$.ajax({
type : 'post',
url : url,
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',
/*....your data....*/
vip:document.getElementById('vip').value
},
cache: false,
success: function(html){
$('#vip_point_redeeming').html(html);
}
});
return false;
}