Codeigniter(CSRF)jQuery ajax问题

我在这里遇到了一个问题,当我尝试使用ajax(POST)发布内容时,我一直收到错误。 我知道CSRF给了我这些问题,并且我一直在尝试寻找解决方案。 但是,我希望有人可以帮助我!

这是我一直得到的错误(来自谷歌浏览器检查员),

* 无法加载资源:服务器响应状态为500(内部服务器错误)XHR已完成加载:“http:// localhost / woho / ajax / images”。 *

PHP(控制器)

class Ajax extends CI_Controller { function images() { echo 'Hello World'; } } 

使用Javascript

 var ID = $(".imageWrap:last").attr("id"); var baseurl = "http://localhost/woho/"; var doScroll = 1; var cct = $.cookie('csrf_cookie_name'); if (location.href == baseurl) { $(window).scroll(function(){ if ($(window).scrollTop() > $('body').height() / 2) { if(doScroll == 1) { $.post(baseurl + 'ajax/images',{'id' : ID, 'csrf_token_name': cct}, function(data) { alert(data); $("#wrapper_content").append(data); ID++; }); } } }); } 

我的CCT var来自javascript给了我正确的令牌或“哈希”,但是当javascript发送ajax请求时,codeigniter返回一个错误,如,

遇到错误不允许您请求的操作。

我怎样才能解决这个问题? 我是否需要在控制器中validationCSRF令牌?

我正在使用Codeigniter 2.0.3

试试(javascript):

 var ID = $(".imageWrap:last").attr("id"); var baseurl = "http://localhost/woho/"; var doScroll = 1; var cct = $.cookie("config->item("csrf_cookie_name"); ?>"); if (location.href == baseurl) { $(window).scroll(function(){ if ($(window).scrollTop() > $('body').height() / 2) { if(doScroll == 1) { $.post(baseurl + 'ajax/images',{'id':ID,'security->get_csrf_token_name(); ?>': cct}, function(data) { alert(data); $("#wrapper_content").append(data); ID++; }); } } }); } 

检查/application/config/config.php中$config['csrf_token_name'] ,因为默认设置为csrf_test_name而不是csrf_token_name

如果你不想在Javascript中使用PHP代码,这个决定。

 $.ajax({ url: 'some_url', type: 'POST', data: {csrf_test_name: $.cookie('csrf_cookie_name')} }); 

这段代码工作正常。

如果使用form_open("/some",'id="some_form"')form_close() ,则CI会创建一个隐藏的输入,用于保存csrf_token_name及其值。

所以,在您的AJAX请求中,您可以通过序列化并发送表单来获取表单!

例如:

  

CSRF总是我的问题,通过这种方法,它解决了!

它可能会迟到,但我发现这种完美的解决方案,但应该工作

 if (isset($_SERVER["REQUEST_URI"])) { if(stripos($_SERVER["REQUEST_URI"],'/mypage') === FALSE) { $config['csrf_protection'] = TRUE; } else { $config['csrf_protection'] = FALSE; } } else { $config['csrf_protection'] = TRUE; } 

//在config.php文件中ci 2. *

从这篇文章找到解决方案

只需遵循以下代码:

 $.ajax({ type : 'post', url : 'Your URL', data : { id: id, 'security->get_csrf_token_name(); ?>' : 'security->get_csrf_hash(); ?>' }, datatype: 'json', success : function(data){} });