繁体   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