資料庫的 方式來進行使用者登入驗證的
1
:登入
A:使用者填好登入表單之後
資料被送出 給source/do_login.php 處理
B:在do_login.php中下面這些
語句接收傳 遞來的使用者名密碼與cookie生效
時間
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
C:然後驗證使用者送出來的使用者名以及密碼的正确性,不正确則跳轉并提示登入失敗
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
注意:這裡驗證使用者名與密碼的正确性是通過uc_client在Ucenter使用者中心資料庫中
查詢的
D:若驗證通過之後,再将擷取到得使用者賬戶資訊賦給setarr
變量
數組
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
E:查詢uchome的資料庫看該使用者資訊是否存在于Uchome資料庫中,不存在的話,則将從Ucenter中查詢到的使用者資料寫入到uchome的 member表中,存在則将member中的密碼替換掉從Ucenter中查詢出來的密碼,存入setarr變量數組中。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
F:将使用者登入資訊寫入到Uchome的
session表中
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
Session表的資料如下
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
Insertsession
函數在 sourcefunction_space.php中定義
其主要
功能為a: 清除session表中的某個使用者的記錄b:獲得使用者的IP以及是否使用隐身道具
c: 将setarr變量數組中的資料插入到session表中。d:更新
統計數資料 等
G:将使用者名與密碼加密寫入cookie中
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
2
:驗證
判斷目前使用者登入狀态是通過sourcefunction_common.php中的checkauth函數實作的
下面就來分析這個函數
A:判斷$_cookie[auth]是否存在,若不存在則不進行任何處理,并清除所有cookie
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
若存在則:
B:從cookie中反解出使用者名跟密碼資訊
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
注意:這裡說的密碼以及上面說的将密碼加密進cookie中的密碼并不是使用者的真實密碼,而是經過md5雙重加密并且salt處理後的密碼
C:從session資料表中取出使用者ID為$_SGLOBAL[supe_uid]的使用者資訊,若該記錄存在則執行下面的操作,否則執行D操作(直接查 詢使用者資料庫)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
如果取出來的密碼與cookie中的密碼相等,那麼判定為登入成功将資料寫入到$_SGLOBAL['session']數組
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
否則判定為登入失敗,清除所有cookie
D:在C步時,若在session表中沒有該使用者的資料則,在使用者資料表member中查詢該ID得使用者資料,看cookie中的密碼是否與資料庫中的密 碼一樣,如果一樣則登入成功,并将使用者資料寫入到session表中保持使用者的登入狀态,否則登入失敗
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CM3MTN3U2YldzMwMWZiJjMzYzXwIzN1MTM1EzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
上面無論是用session表來判定登入狀态還是用member表來判定登入狀态,都會影響到一個變量,那就 是$_SGLOBAL['supe_uid'],在
程式處理的 時候,使用者登入與否一般要用到得變量就是$_SGLOBAL['supe_uid']。
例如在space.php檔案中 有個這樣的語句
此語句中的checklogin函數就是檢測使用者是否需要登入
這個函數就是看$_SGLOBAL['supe_uid']是否存在,存在的話就以這個ID的身份去操作,不存在就說明使用者登入不成功 需要使用者登入才能操作。