[英]CSRF Token Valid on First Submit in Ajax - Codeigniter
下面是我的代碼以及我如何使用 Ajax 提交我的數據。 在第一次提交時,數據已成功發布,但是,當我再次嘗試時,它失敗了,我懷疑這是來自無效的 csrf,因為可能會生成新的令牌。 我怎么解決這個問題 ?
$('#icon').on('click', '#test', function() {
var ids = $(this).data('id');
var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',
csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
var dataJson = { [csrfName]: csrfHash, ids: ids };
$.ajax({
url: '<?php echo base_url('client/data'); ?>',
type: 'POST',
data: dataJson,
}).done(function (result) {
});
});
我有同樣的問題,我通過刷新 csrf 令牌解決了這個問題。 新的 csrf 令牌進入 ajax 響應表單服務器並替換它存儲在表單隱藏字段中的舊令牌,當您再次提交時使用新令牌。它解決了我的問題,希望您的問題也通過這樣做得到解決,更多使用此鏈接https ://codeigniter.com/user_guide/libraries/security.html
當$config['csrf_regenerate'] = TRUE
時對我$config['csrf_regenerate'] = TRUE
的解決方案是,當為每個請求啟用 CSRF 時,后續 ajax 發布是在請求失敗時在 AJAX Success 中發出 GET 請求,因為令牌已過期。 然后有一個隱藏字段,該字段繼續使用最新令牌進行更新,如果在發出請求時它已過期,則發出 GET REQUEST 以獲取最新令牌,然后在提交表單或發出 POST 請求的函數上調用單擊事件,這意味着該函數必須將“this”或ID作為參數的一部分傳遞。這使得用戶無法在后台實現更新令牌的過程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.