怎樣弄網(wǎng)頁的快速登陸?
最簡單的實(shí)現(xiàn)就是用PHP的會話機(jī)制.
用戶名和密碼驗(yàn)證通過,就在服務(wù)器設(shè)置一些SESSION值,比如:
$_SESSION['login'] = 'true';
$_SESSION['user'] = 'foo';
來標(biāo)記這個服務(wù)器會話對應(yīng)的瀏覽器的會話cookie.
請求通過 if (isset($_SESSION['login']) && $_SESSION['login'] === true ) 來判斷一個會話COOKIE是否已經(jīng)登錄.
而要實(shí)現(xiàn)一套通用的用戶登錄認(rèn)證機(jī)制,那就不要用PHP的會話機(jī)制了,因?yàn)檫@個機(jī)制默認(rèn)是PHP內(nèi)置實(shí)現(xiàn)的基于單機(jī)文件的和PHP序列化serialize格式的機(jī)制,其他語言拿到PHP這個會話COOKIE沒法驗(yàn)證和使用(讀寫服務(wù)器會話文件).
也就是需要設(shè)計另一套cookie或者token認(rèn)證機(jī)制實(shí)現(xiàn)多語言通用,不管什么語言,拿到這個cookie后,使用相同的解密算法如aes-128-cbc解密得到cookie內(nèi)容,取得cookie里保存的用戶信息,如用戶編號(id)和用戶顏值(salt),然后根據(jù)用戶編號查詢數(shù)據(jù)庫,在比對數(shù)據(jù)庫里的用戶salt和cookie里的用戶salt,一致則通過cookie認(rèn)證.這個數(shù)據(jù)庫用戶salt是在用戶注冊和修改密碼時重新生成的東西,用于給密碼加鹽,也用于參與到cookie認(rèn)證.如果擔(dān)心用戶的salt泄露,還可以考慮給用戶的salt加一個系統(tǒng)的配置鹽再存到cookie中.
為了避免每個請求驗(yàn)證cookie時都查詢一次數(shù)據(jù)庫,可以考慮把用戶對應(yīng)的顏值緩存到Redis中:key(user:id:salt) => value(xxx)