猿问

CSRF 令牌在 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) {


                     });

                     });


哔哔one
浏览 168回答 2
2回答

富国沪深

我有同样的问题,我通过刷新 csrf 令牌解决了这个问题。新的csrf令牌进入ajax响应表单服务器并将其替换为存储在表单隐藏字段中的旧令牌,当您再次提交时使用新令牌。它解决了我的问题希望您的问题也可以通过这样做来解决,更多使用此链接https ://codeigniter.com/user_guide/libraries/security.html

回首忆惘然

对我有用的解决方案是$config['csrf_regenerate'] = TRUE当为每个请求启用 CSRF 时后续的 ajax 发布是在请求失败时在 AJAX Success 中发出 GET 请求,因为令牌已过期。然后有一个隐藏字段继续使用最新令牌进行更新,如果在发出请求时它已过期,您发出 GET REQUEST 以获取最新令牌,然后在提交表单或发出 POST 请求的函数上调用点击事件,这意味着该函数必须传递“this”或ID作为参数的一部分。这使得用户无法在后台实现更新令牌的过程
随时随地看视频慕课网APP
我要回答