我在這裏瘋了。我在我的腳本中提供了一個由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