gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:02:50 25 4
gpt4 key购买 nike

我试图将一些数据传递到我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com