本文是在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助手,可以輸出美觀易...