Yii2 User 登入原理

2021-07-28 05:42:09 字數 3779 閱讀 6192

本文是在session登入暢通無阻的前提下,首先要先搞好session登入,這個在這裡不做敘述,好多session登入的文章。本文敘述cookie登入的原理和使用

yii2 user cookie 登入原理

1.具體實現:

1.1 cookie登入配置config方面,配置好的**如下:

'components' => [

'user' => [

'identityclass' => 'fecshop\models\mysqldb\customer',

'enableautologin' => true,

'authtimeout' => 3600,

],],

enableautologin設定為true,就會使用cookie登入,如果設定了enableautologin,那麼下面的超時時間authtimeout就會無效,因為這個引數是session的超時時間,不過,我們可以在登入的時候,超時時間也從這個配置引數讀取,譬如下面的函式引數$duration,可以從這裡讀取,如果這樣,就會有效。

$duration = \yii:

: \yii:

:

上面的結論通過**解釋,如下:

public

function

login

(identityinte***ce $identity, $duration = 0)

else

yii::info($log, __method__);

$this->afterlogin($identity, false, $duration);

}return !$this->getisguest();

}

檢視$this->switchidentity($identity, $duration);

public

function

switchidentity

($identity, $duration = 0)

/* ensure any existing identity cookies are removed. */

if ($this->enableautologin)

if (!yii_env_test)

$session->remove($this->idparam);

$session->remove($this->authtimeoutparam);

if ($identity)

if ($this->absoluteauthtimeout !== null)

if ($duration > 0 && $this->enableautologin)

}}

檢視:$this->sendidentitycookie($identity, $duration);

protected

function

sendidentitycookie

($identity, $duration)

通過一層層的函式可以看到,cookie的超時時間是從login()函式中讀取出來的,

而不是從\yii\web\user的authtimeout變數讀取。最後傳遞給sendidentitycookie($identity, $duration)方法,進而設定cookie的超時時間。

另外配置中開啟了enableautologin,但是在呼叫login方法的時候沒有設定超時時間變數$duration,同樣不會設定cookie,進而配置 enableautologin 無效,下面是**解釋:

public

function

switchidentity

($identity, $duration = 0)

}

可以看到,如果超時時間為0,那麼不會執行設定cookie的方法

public function sendidentitycookie($identity, $duration);進而不會設定cookie

1.2 **改進: 參考**:

public

function

getcustomer

() return

$this->_customer;

}public

function

login

($duration = 86400)

else

}

在上面的**,預設cookie的過期時間為86400秒,這樣預設就不會cookie超時 如果我我呼叫:

$

model = new customerlogin;

$model->email = $data['email'];

$model->password = $data['password'];

$loginstatus = $

model->login(0);

由於過期時間填寫為0,因此,即使在user元件中開啟配置enableautologin=true, cookie也不會生效。

另外,我如果從\yii\web\user的authtimeout變數讀取。來設定cookie的超時時間,也是乙個不錯的選擇,**如下:

public

function

login

($duration = 0)

}if ($this->validate()) else

}

cookie超時時間重新整理。

該變數預設為true,所以不需要在配置中設定這個變數,使用預設就好。

cookie超時時間重新整理的原理解釋,下面是詳細**:

public

function

getidentity

($autorenew = true)

else

}return

$this->_identity;

}

會執行renewauthstatus()方法

protected

function

renewauthstatus

() else

$this->setidentity($identity);

if ($identity !== null && ($this->authtimeout !== null || $this->absoluteauthtimeout !== null)) elseif ($this->authtimeout !== null)

}if ($this->enableautologin) elseif ($this->autorenewcookie)

}}

如果enableautologin開啟,如果登入就會執行renewidentitycookie方法。

protected

function

renewidentitycookie

() }

}

public

function

getisguest

()

yii2登入筆記

yii2高階模板中自帶了登入註冊功能,這裡先記下登入功能的實現筆記 建立一張使用者user表,裡面需要根據user 的model檔案進行更改一些欄位名和新增,password hash是指用yii2進行雜湊加密後的密碼串。auth key使用使用者註冊時加的唯一標示,可以用來在瀏覽器記住使用者登入有...

Yii 2 登入使用者校驗

在登入頁面,輸入使用者名稱密碼後,yii2是如何完成使用者名稱和密碼的校驗的?根據yii的規則,使用者校驗的入口是從action開始的 sitecontroller actionlogin loginform login loginform validate loginform validatepa...

yii2實戰之使用者註冊登入

繼控制器與檢視互動,本篇將講解如何自定義全域性函式,以及使用yii自帶的使用者註冊登入功能 有時候我們希望自定義一些函式,可以在全域性中呼叫,如php預設的var dump在頁面上的顯示效果並不好,尤其是多層級陣列的情況下,一大坨資料很難分辨。對此,yii提供了vardumper助手,可以輸出美觀易...