yii2 doajax post 會報500錯誤

2021-09-07 10:33:05 字數 1947 閱讀 4555

yii2:doajax(post)會報500錯誤:這是因為yii2開啟了防禦csrf的攻擊機制,可去先去掉,在控制器裡去掉:public $enablecsrfvalidation = false ,

上一節主要是簡單地說了一下關於yii2的防禦csrf的攻擊機制,接下來說一下關於如何全域性和區域性的開啟使用csrf。

(1)全域性使用,我們直接在配置檔案中設定enablecookievalidation為true

request => [  

'enablecookievalidation' => true,

]

如果不需要使用csrf的話,設定'enablecookievalidation' => false,但是這是不安全的,因此yii2的yii\web\request中的enablecookievalidation預設設定為true的,也就是預設開啟csrf的,所以我們也可以不配置這個值,預設開啟。

如果開啟csrf,因為這是全域性的,所以在任何的post請求都會要求認證,所以我們在post資料的時候,就必須設定csrf的資料隱藏在表單中。

所以無論是post表單還是ajax的post過去,都必須設定csrftoken這個值,並且要提交時要post過去。如果沒有的話,就會發生錯誤,無法認證通過。

(2)如果想在某些控制器不想使用csrf驗證的話,又該如何做呢?

方法很簡單,直接設定

public $enablecsrfvalidation = false ,

3)如果要具體關閉至某乙個action呢?

有時在一些功能中,我們需要在某乙個action中關閉csrf驗證。我們知道對於csrf的驗證是在beforeaction($action)中實現的,下面我們可以在controller中重寫beforeaction($action)這個方法

public function beforeaction($action)   

parent::beforeaction($action);

return true;

}

傳入的引數$action是controller針對這個訪問例項化的物件,裡面包含很多資訊,大家可以列印看看。

首先執行$action->id獲取當前的訪問的action名稱。而$novalidactions是乙個陣列,裡面是action名稱,這些action都是是你需要關閉csrf的認證的操作(需要關閉csrf認證的操作)。

通過當前的訪問的action是否在這個$novalidactions中,如果在,說明這個action需要關閉csrf功能,所以就將這個控制器例項的設定為

$action->controller->enablecsrfvalidation = false

接下來再執行parent::beforeaction($action),此時傳入來的$action裡的controller例項的enablecsrfvalidation已變為false。

最後一定要返回true,否則的話,不會往下執行action操作的。

(4)如果區域性開啟呢?

首先在配置檔案要設定

request => [

'enablecookievalidation' => false,

]全域性不使用csrf。

(a)要在控制器中開啟,只需要設定

public $enablecsrfvalidation = true

則整個控制器都會開啟

(b)要在action中開啟

public function beforeaction($action)

parent::beforeaction($action);

return true;

}$accessactions是需要開啟csrf的action的名稱,將設定$action->controller->enablecsrfvalidation = true,當前操作可以開啟csrf。

Yii2 配置yii2 redis擴充套件

前提 已經安裝redis。一 包檔案安裝 yiisoft yii2 redis extentions.php然後配置vender yiisoft extensions.php檔案 yiisoft yii2 redis array name yiisoft yii2 redis version 2.0...

Yii2 配置yii2 redis擴充套件

前提 已經安裝redis。一 包檔案安裝 yiisoft yii2 redis extentions.php 然後配置vender yiisoft extensions.php檔案 yiisoft yii2 redis array name yiisoft yii2 redis version 2....

yii2擴充套件yii2 imagine遇到的問題

最近在使用yii2移植 時,在縮圖那裡卡了兩天,幾乎搞得想崩潰,但經過我不屈不撓的努力,終於成功搞定!剛開始一直按照網上的教程,在cmd使用命令列安裝,php composer.phar require prefer dist yiisoft yii2 imagine ps 附上該方法教程 但是一直...