博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii2出现的400错误
阅读量:6294 次
发布时间:2019-06-22

本文共 973 字,大约阅读时间需要 3 分钟。

来一段百度来的正常解决方法,注意有很大的坑!

第一种解决办法是关闭Csrf

1配置文件关闭

 

2控制器里面关闭

public function init(){    $this->enableCsrfValidation = false;}

第二种解决办法是在form表单中加入隐藏域

第三种解决办法是在AJAX中加入_csrf字段

var csrfToken = $('meta[name="csrf-token"]').attr("content");$.ajax({  type: 'POST',  url: url,  data: {_csrf:csrfToken},  success: success,  dataType: dataType});

我用ajax提交的,又不想关闭csrf验证(不推荐),所以选择第三种解决方法,在data中添加

参数   _csrf:csrfToken,之后试了很多次还是报错400,原因是_csrf 这个参数需要和你的配置文件定义的一致才行,

不能直接使用_csrf

例如我的main.php配置文件设置的名称是_csrf-frontend,所以你在ajax提交的数据也要使用_csrf-frontend,而不是_csrf

要改为:

var csrfToken = $('meta[name="csrf-token"]').attr("content");$.ajax({  type: 'POST',  url: url,  data: {'_csrf-frontend':csrfToken},  success: success,  dataType: dataType});

 

注意第二种解决方法中也要注意这个参数名

还有问题要注意

 如果你的页面没有form的话,ajax的post提交是没问题的,用ajax的post提交会自动产生_csrf 

如果你的页面是有form尤其是上传文件类型为file的话,ajax的post还是会出现400验证的

假如文件上传接收为空值:注意配置文件ini这三个参数问题

max_execution

post_max_size

upload_max_filesize

转载于:https://www.cnblogs.com/JahanGu/p/8492742.html

你可能感兴趣的文章
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>