codeigniter - 如何将 Codeigniter 中的 CSRF 包含到 ajax 数据中

标签 codeigniter jquery

我试图将一些数据传递到我的 Controller 中,但收到 500 错误。经过一番研究,发现是由于CSRF token没有发送造成的。

看来我需要将其与数据一起包含:<?php echo $this->security->get_csrf_token_name(); ?>:"<?php echo $this->security->get_csrf_hash(); ?>"

我的 JS 非常弱,所以我对如何更改它以包含上述内容感到有点困惑。

<script type="text/javascript"> 
$(document).ready(function() {
    $("#order").sortable({
        update : function (event, ui) {
            order = $('#order').sortable('serialize');
            $.ajax({
                url: "<?=base_url().'admin/category/update_order'?>",
                type: "POST",
                data: order,
                success: function(response){
                    console.log(response);
                }
            });
        }
    });
}
);
</script>

最佳答案

token 需要在 data 中传递$.ajax 的参数.

这应该可行,但请参阅下面我的注释。

order['<?php echo $this->security->get_csrf_token_name(); ?>'] = '<?php echo $this->security->get_csrf_hash(); ?>';

但是,这里存在一些不好的做法。主要是您不应该在 javascript 中使用 PHP,因为这会阻止您将 javascript 作为单独的文件进行访问(这很好,因为浏览器会缓存它以使您的页面加载速度更快并消耗更少的带宽)。

最好将 token 存储在您的订单中 <form>像这样的 html..

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />

然后它将与表单数据的其余部分一起序列化。

您还可以将 URL 存储在表单的操作属性中。这将帮助您的脚本正常降级,并将 URL 保留在一个位置而不是 2 个位置。

<form id="order" method="post" action="<?=base_url()?>admin/category/update_order">

$.ajax打电话,使用类似 url: $('#order').attr('action'), 的东西假设#order 是实际的表单ID。

关于codeigniter - 如何将 Codeigniter 中的 CSRF 包含到 ajax 数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11269439/

相关文章:

forms - Codeigniter - 设置复选框选中状态的值

php - 我需要在最后一个日期匹配时显示提醒消息

javascript - 谨防javascript的痛点要当心

javascript - window.open 有时会打开链接,有时不会

javascript - 从定界字符串中删除特殊单词

javascript - 让 Select2 Gem 与 A​​ctiveAdmin "Add New"按钮一起使用

codeigniter - 一段时间后删除数据库缓存

php - 使用 jquery 将 jquery 数组更新为隐藏字段

php - Grocery Crud - 在表单提交上打印 post_array

jquery - 从 jQuery 成功进行 AJAX 调用时检索 glyphicons-halflings-regular.woff2 时出错