我在这里疯了。我在我的脚本中提供了一个由ajax提交的表单:Yii CSRF令牌无法验证
jQuery.ajax({
url:jQuery('form',modal).attr('action'),
contentType: "application/json; charset=utf-8",
dataType: 'json',
type:'post',
data: {
email:jQuery('input[name="email"]',modal).val(),
something:jQuery('input[name="something"]',modal).val(),
level:jQuery('select[name="level"]',modal).val(),
YII_CSRF_TOKEN: jQuery('input[name="csrf"]').val()
},
success: function(data){
jQuery('.message',modal).html(data.message).slideDown();
if (!data.success){
jQuery('input[name="email"]',modal).addClass('error');
} else {
jQuery('input[name="email"]',modal).removeClass('error');
}
}
});
一切都很好。那么今天我正在写一个新的函数来删除数据库中的项目。所以我写了我的PHP函数(没有额外的复杂),并添加通过点击链接触发jQuery的AJAX调用它:
// ajax request
jQuery.ajax({
url:jQuery(this).attr('href'),
contentType: "application/json; charset=utf-8",
dataType: "json",
type:'post',
data: {
something:jQuery(this).attr('alt'),
YII_CSRF_TOKEN:jQuery('input[name="csrf"]').val()
},
success: function(data){
}
});
两者的联系和形式都在同样的观点。但添加新的功能后删除所有类型的崩溃。我无法向服务器发送任何POST请求,只是出现“错误:无法验证CSRF令牌。” 。 我在通过CSRF时看不到问题。 Firebug的日志显示:
YII_CSRF_TOKEN bf6d9bf62ee96f32e34a74244baca7f2f1bdd569
something 4
我能明白,新的功能不以任何理由的工作,但为什么其他功能打破了为好,我不能。
请帮忙
[This](http://stackoverflow.com/questions/11153112/yii-error-400-the-csrf-token-could-not-be-verified-when-trying-to-delete-the-pos ) 可能有帮助。 – Vlad
我相信你可以在firebug/firefox中跟踪http请求/响应。确保cookie包含与表单相同的值。这意味着您可以找到一个名称为“YII_CSRF_TOKEN”并且应该与表单的“YII_CSRF_TOKEN”值匹配的cookie。 – SuVeRa
@SuVeRa至少有人花了一秒钟才真正想到这个问题,谢谢。不幸的是,你所说的一切,我尝试/检查cookie中的值是相同的,我ebeu试图删除它,但仍然是同样的问题。有一些额外的字符在cookie看起来像编码的网址(%20等),其中只有少数,我现在没有在手,它可以尝试跟踪是什么 – Tom