最近一直出现这样的错误,一直在查找原因,偶然看到一篇解决的文章,分享给大家看看。
第一种解决办法是关闭csrf
public function init(){
$this->enablecsrfvalidation = false;
}
第二种解决办法是在form表单中加入隐藏域
<input name="_csrf" type="hidden" id="_csrf" value="<?= yii::$app->request->csrftoken ?>">
第三种解决办法是在ajax中加入_csrf字段
var csrftoken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
type: 'post',
url: url,
data: {_csrf:csrftoken},
success: success,
datatype: datatype
});
yii这个匹配的过程和yii::$app->request->csrftoken 这个值存储位置说明:
存储位置
protected function createcsrfcookie($token)
{
$options = $this->csrfcookie;
$options['name'] = $this->csrfparam;
$options['value'] = $token;
return new cookie($options);
}
校验方法
public function validatecsrftoken($token = null)
{
$method = $this->getmethod();
// only validate csrf token on non-"safe" methods http://www.w3.org/protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
if (!$this->enablecsrfvalidation || in_array($method, ['get', 'head', 'options'], true)) {
return true;
}
$truetoken = $this->loadcsrftoken();
if ($token !== null) {
return $this->validatecsrftokeninternal($token, $truetoken);
} else {
return $this->validatecsrftokeninternal($this->getbodyparam($this->csrfparam), $truetoken)
|| $this->validatecsrftokeninternal($this->getcsrftokenfromheader(), $truetoken);
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
评论列表:
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论