UCenter同步流程:前提是需要在Ucenter上面添加好需要同步登錄的應用,至少2個才能看到效果,并且顯示,通信成功.
假如我添加了A,B兩個應用網站
1.首先當A站登錄時,登錄成功后,處理實質是調用uc_client提供的方法向UCenter獲取2個腳本代碼(A、B站),這兩個腳本代碼就是訪問A、B兩個站的api/uc.php中的登錄方法,可以在方法中做登錄所需session和cookie操作。
2.當登出時,操作和登錄是一樣的,都需要向UCenter獲取2個腳本代碼,目的是用來觸發A、B站的api/uc.php中登出方法。
重點:當獲取到2個腳本代碼后一定需要在輸出讓瀏覽器運行,否則將不會實現同步登錄登出.
建議:開發調試的時候,借助瀏覽器監控來查看返回輸出值,我當時用的是chrome F12 后 打開Network標簽.
實例詳解:所謂單點登錄,無非就是幾個站點共用一個用戶中心,實現同步登陸,同步退出.
服務器端:Loog SSO
客服端:ucenter,說實話dz商業化確實讓php發展了不少.
ucenter 基本原理:其實最終還是 用戶去登錄 只是采用了ajax 用戶不會發現,我們來看看和ucenter的具體程序,config.php代碼如下:
- define(‘UC_CONNECT’, ’mysql’); // 連接 UCenter 的方式: mysql/NULL, 默認為空時為fscoketopen()
- //數據庫相關 (mysql 連接時, 并且沒有設置 UC_DBLINK 時, 需要配置以下變量)
- define(‘UC_DBHOST’, ’localhost’); // UCenter 數據庫主機
- define(‘UC_DBUSER’, ’root’); // UCenter 數據庫用戶名
- define(‘UC_DBPW’, ’123′); // UCenter 數據庫密碼
- define(‘UC_DBNAME’, ’ucenter’); // UCenter 數據庫名稱
- define(‘UC_DBCHARSET’, ’utf8′); // UCenter 數據庫字符集
- define(‘UC_DBTABLEPRE’, ’ucenter.uc_’); // UCenter 數據庫表前綴
- define(‘UC_KEY’, ’safefewfef’); // 與 UCenter 的通信密鑰, 要與 UCenter 保持一致
- define(‘UC_API’, ’http://www.49028c.com/uc’);// UCenter 的 URL 地址, 在調用頭像時依賴此常量
- define(‘UC_CHARSET’, ’utf-8′); // UCenter 的字符集
- define(‘UC_IP’, ’127.0.0.1′); // UCenter 的 IP, 當 UC_CONNECT 為非 mysql 方式時, 并且當前應用服務器解析域名有問題時, 請設置此值
- define(‘UC_APPID’, ’3′); // 對應到ucenter當前應用的 ID
- define(‘UCDOMAIN’,'http://www.49028c.com/’); // 域名設置
- //一些 Cookie 設置
- $_UC = array();
- $_UC["cookiedomain"] = ”; // cookie 作用域
- $_UC["cookiepath"] = ’/'; // cookie 作用路徑
- $_UC["cookiepre"] = ’uc_’; // cookie 前綴
- $_UC["cookietime"] = ’31536000′; //cookie 作用時間
配置文件寫好后,到ucenter后臺里面添加一個應用記住是自定義的‘UC_KEY’必須和config.php里面相同,接下來就是你的主目錄下的api/uc.php文件.
例如應用url 填寫為 http://www.49028c.com 那么我就有對應的http://www.49028c.com/api/uc.php
如果要自定義的話,請確認你的對應關系,最重要的就是api/uc.php,同步登錄就是訪問各個應用的uc.php 關于這個dz已經給了demo,PHP代碼如下:
- define(‘API_DELETEUSER’,0); //note 用戶刪除 API 接口開關
- define(‘API_RENAMEUSER’, 0); //note 用戶改名 API 接口開關
- define(‘API_GETTAG’, 0); //note 獲取標簽 API 接口開關
- define(‘API_SYNLOGIN’, 1); //note 同步登錄 API 接口開關
- define(‘API_SYNLOGOUT’, 1); //note 同步登出 API 接口開關
- define(‘API_UPDATEPW’, 0); //note 更改用戶密碼 開關
- define(‘API_UPDATEBADWORDS’, 0); //note 更新關鍵字列表 開關
- define(‘API_UPDATEHOSTS’, 0); //note 更新域名解析緩存 開關
- define(‘API_UPDATEAPPS’, 0); //note 更新應用列表 開關
- define(‘API_UPDATECLIENT’, 0); //note 更新客戶端緩存 開關
- define(‘API_UPDATECREDIT’, 0); //note 更新用戶積分 開關
- define(‘API_GETCREDITSETTINGS’, 0); //note 向 UCenter 提供積分設置 開關
- define(‘API_GETCREDIT’,0); //note 獲取用戶的某項積分 開關
- define(‘API_UPDATECREDITSETTINGS’, 0); //note 更新應用積分設置 開關
這些參數都是向別的應用提供的功能開關,最后關于 自己的頁面如何同步登錄 別的應用,PHP代碼如下:
include_once ’../config.php’;
include_once ’../uc_client/client.php’;
你的驗證登錄部分,代碼如下:
- list($uid, $username, $password) = uc_user_login($_POST[username], $_POST[password]);//進入ucenter驗證
- $ucsynlogin = uc_user_synlogin($uid);//同步登錄
- echo $ucsynlogin;//因為是ajax 要echo
只用php,康盛的解決方案是比較不錯的了,而且利用了p3p頭實現了 不同域名 單點登錄,缺點就是采用ajax 客服端請求,如果有10個以上應用,登錄速度就慢下來了,這時候就可以考慮下七夜的Loong SSO.
新聞熱點
疑難解答