默认状况下yii2是开启了csrf验证功能的,若是须要关闭它的话,只要在控制器中设置一个属性就能够:jquery
public $enableCsrfValidation = false;
通常状况下不建议关闭,但api场景可能须要关闭。ajax
token生成有三种方式后端
在模板中使用 <?=yii\helpers\Html::csrfMetaTags();?>
便可生成meta标签,以下api
<meta name="csrf-param" content="_csrf"> <meta name="csrf-token" content="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">
meta标签主要是给ajax用的,ajax提交的时候能够直接从meta中获取csrf-token而后一并提交给后端,csrf-param就是参数名称,也能够直接经过header头提交,以jquery为例:yii2
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
使用 <?=yii\helpers\Html::beginForm();?>
替代手动输入 <form>
标签,yii2框架会自动添加一个隐藏的input,相似下面这样:app
<form> <input type="hidden" name="_csrf" value="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">
固然,为了保持对称,建议使用 <?=yii\helpers\Html::endForm();?>
替代 </form>
框架
<?=Yii::$app->request->getCsrfToken();?>
能够直接获取到token,这样随便放在哪一个位置,比较灵活。但记得post的时候要记得提交给后端,参数名字的话默认是 _csrf
,也能够经过 Yii::$app->request->csrfParam
获取。yii