1、使用者登入discuz,透過logging.php檔案中的函數uc_user_login對post過來的資料進行驗證,也就是對username和password進行驗證。
2、如果驗證成功,將呼叫位於uc_client下client.php檔案中的函數uc_user_synlogin,在這個函數中呼叫 uc_api_post('user', 'synlogin', array('uid'=>$uid))。
3、然後這個函數後向Ucenter的index.php傳遞數據,index.php接受傳遞的數據,獲得model為user,action為synlogin的值。
4、然後Ucenter的index.php呼叫control目錄下的user.php類別中的onsynlogin方法,透過foreach循環,以javascript的方式通知uc應用程式清單中開啟同步登陸的應用程式進行同步登入;即透過get方式傳遞給各個應用目錄中api下的uc.php一些資料。
5、uc.php接收通知並處理get過來的數據,並在函數synlogin(位於uc.php中)透過函數_authcode加密資料(預設以UC_KEY作為金鑰),用函數_setcookie設定cookie。
6、各個應用程式用對應的金鑰解碼上面設定的cookie,得到使用者id等資料;透過這個值來判斷使用者是否經過其它應用程式登入過,從而讓使用者可以自動登陸。
應用程式的logging.php ------>uc_client中的client.php------>Ucenter------>其他應用程式中的api/uc.php。
其實Ucenter實現同步登陸的原理就是cookie,一個應用程式登陸成功之後,向Ucenter傳遞數據,讓Ucenter通知其他的應用程式也設定cookie,這樣用戶在存取其他應用程式的時候透過已經設定好的cookie實現自動登陸。
大致步驟,首先要安裝ucenter 然後把uc_client 這個資料夾複製到自己的專案裡面去,然後呢在設定幾個檔案
client.php相當於函式庫
uc.php相當於回呼檔案
config.php 是設定檔
當你有2個應用程式都設定了同步登陸之後 當你登陸一個應用程式然後執行
include './config.inc.php'; include './uc_client/client.php'; $usernames="kyee"; $passwords="123456"; list($uid, $username, $password, $email) = uc_user_login($usernames, $passwords); if($uid > 0) {
setcookie("username",$username,time()+intval(24*3600)); echo uc_user_synlogin($uid); echo '登录成功'; } elseif($uid == -1) { echo '用户不存在,或者被删除'; } elseif($uid == -2) { echo '密码错误'; } else { echo '未定义'; }
uc_user_synlogin() 這個函數代表著要同步登陸到其他所有開啟同步登陸的函數 uc自己會在背景把所有開啟同步登陸的應用程式都給循環遍歷一遍然後在頁面上輸出
<script type="text/javascript" src="http://rayibeauty.ck101.com/api/uc.php?time=1408327309&code=bc6bFLa6WH343nin2GAn%2F82Y9cnCennPk1gcLGYHdQF4wsXsOSdTyqBb2Nuoxe0UJqzWMWncdx%2FfQ1GK6FS%2BqJqi2AxVG2Oq1pD9c1wZy%2BgjXs7qo4mm2sxFVHwW7JnjKGPDkVdDqtYeybkSISz7yrdb0ZFuXH2yr3Cq" reload="1"></script> <script type="text/javascript" src="http://kibeauty.ibeauty.tw/api/uc.php?time=1408327309&code=206flCqeb%2Faft%2FDFPno9Bvqsb1b0o6XTZdIByOoD7EC11vMrjzC7PaKLo0LF3tGiHwlwZkwdW5VDHq866MGulsco5nekfkL341VWp7BPabnZPNtgG7m4jZpfdx6nVP0LTJLYI%2BkebI7uLm58atk8Ex4sKBj%2FfDkjH%2F8z" reload="1"></script>
類似這種的js代碼,就是發送給每個開啟同步登陸的應用, 然後每個開啟同步登陸的應用的回呼檔案uc.php 接受到後會進行解密,解密好後其實你就可以自己來寫程式碼了,這個uc.php回呼檔案的程式碼不一定要照他們的格式來寫,你也可以自己寫你自己的代碼。
其實UC的原理很簡單 ,就是某個應用登陸後,然後後台輪詢發送給同步登陸的應用的回調文件 ,回調文件接收到用戶ID之後,生成cookie或者session然後進入登陸模式。
更多簡單分析ucenter 會員同步登入通訊原理相關文章請關注PHP中文網!