簡體   English   中英

CSRF 令牌在 Ajax 中首次提交時有效 - Codeigniter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM