0

我这里有一个小问题我无法解决,这篇文章通过但响应返回“500 内部服务器错误”</p>

谁来修复它?

在 CI 论坛中搜索后,我发现了这个链接codeigniter-csrf-protection-with-ajax但我无法解决它。任何人都可以帮助我吗?

4

1 回答 1

4

您应该在 AJAX POST 请求中包含 csrf 键以使操作生效。

但是,您只是在获取数据,因此使用method:'get'而不是method:'post'应该可以解决问题并使您的请求有效。

有关何时使用 POST 和何时使用 GET 的精彩讨论,请参阅此问题

如果您确实计划将数据发布到服务器,并且它抱怨缺少 CSRF 密钥,则有两种方法可以将其添加到请求中:

  • 使用插件允许原型从由 codeigniter 设置的 csrf cookie 中提取数据;这可能更优雅,但会为您的总脚本增加一点;这是一篇关于如何在原型http://codeinthehole.com/writing/javascript-cookie-objects-using-prototype-and-json/中访问 c​​ookie 的详细信息

  • 如果您从现有表单发送此请求,它应该有一个包含密钥的隐藏输入字段,您可以使用类似的东西简单地访问它var csrf = $("input[name=csrf_key]").val();(这是 jQuery 语法,但我确定原型版本不是t 太远)。如果该页面中没有表单,只需在echo form_open(); form_close();某处写一个以确保 CI 打印出隐藏字段。

最后,确保您在 POST 请求中发送该值,以确保您是一个不想要 hackz0r 服务器的帅哥。您应该将此参数添加到 JS 中的 ajax 请求中:

parameters: {'csrf_key' : csrf}

其中 csrf 是您从中获取密钥的变量(来自 cookie 或来自隐藏的输入)。确保名字没问题!如果您要获取 cookie,请确保 cookie 名称与config/config.php. 输入令牌也是如此!

希望这可以帮助!

于 2012-04-08T09:23:45.837 回答