下面是我的代码以及我如何使用 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) { }); });
2 回答
富国沪深
TA贡献1790条经验 获得超9个赞
我有同样的问题,我通过刷新 csrf 令牌解决了这个问题。新的csrf令牌进入ajax响应表单服务器并将其替换为存储在表单隐藏字段中的旧令牌,当您再次提交时使用新令牌。它解决了我的问题希望您的问题也可以通过这样做来解决,更多使用此链接https ://codeigniter.com/user_guide/libraries/security.html
回首忆惘然
TA贡献1847条经验 获得超11个赞
对我有用的解决方案是$config['csrf_regenerate'] = TRUE
当为每个请求启用 CSRF 时后续的 ajax 发布是在请求失败时在 AJAX Success 中发出 GET 请求,因为令牌已过期。然后有一个隐藏字段继续使用最新令牌进行更新,如果在发出请求时它已过期,您发出 GET REQUEST 以获取最新令牌,然后在提交表单或发出 POST 请求的函数上调用点击事件,这意味着该函数必须传递“this”或ID作为参数的一部分。这使得用户无法在后台实现更新令牌的过程
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消