【问题标题】:AJAX does not work the second time csrf token issue in codeigniterAJAX 在 codeigniter 中第二次出现 csrf 令牌问题时不起作用
【发布时间】:2017-12-16 10:58:03
【问题描述】:

我的 ajax 调用第一次工作,但第二次它不起作用,它返回类似 .. 您请求的操作是不允许的。 在控制台的标题中,状态代码是 403 Forbidden

Controller方法如下..

public function authenticate() {
    echo json_encode('sachin');
}

jQuery函数

$("#adminFrmSubmitBtn").on('click',function(){
    if($("#admin_login_frm").valid()){
        var frmData=$(this).closest('form').serialize();
        frmData+='&'+$.param({'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'});
        $.ajax({
            url:'<?php echo base_url('login/authenticate12'); ?>',//$(this).closest('form').attr('action'),
            method:$(this).closest('form').attr('method'),
            data:frmData,
            success:function(response){
                console.log(response);
            }
        });
    }else{
        return false;
    }
});

Html代码

<form action="<?php echo base_url('login/authenticate'); ?>" method="post" name="admin_login_frm" id="admin_login_frm">               
      <input type="text" name="user_name" class="form-control" placeholder="Email">
      <input type="password" name="user_password" class="form-control" placeholder="Password">
      <button type="button" class="btn btn-primary btn-block btn-flat" >
</form>

【问题讨论】:

标签: php ajax codeigniter


【解决方案1】:

获取新的 CSRF 令牌。我们必须使用 Javascript 获取 cookie,因为 Codeigniter 将 CSRF 令牌存储在 cookie 中。

将以下代码放入您的视图(.php)文件中。

    <script type="text/javascript">

    function get_cookie(cname) {    //using this function we can get cookie
       var name = cname + "=";
       var ca = document.cookie.split(';'); 
       for(var i=0; i<ca.length; i++) {
          var c = ca[i];
          while (c.charAt(0)==' ') c = c.substring(1);
          if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
      }
      return "";   
   }

    $.ajax({
        type: "POST",
        url: "YOUR-URL",
        data: {"<?php echo $this->security->get_csrf_token_name(); ?>":csrf_token}, //Add your data which you want to post
        dataType: "json",
        success: function(resp){            
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('Something is wrong');
            window.location.reload();
        }
    }); 

</script>

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 2018-07-10
    • 2011-09-28
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2018-12-31
    • 2021-07-08
    相关资源
    最近更新 更多