国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > Discuz > 正文

從源碼看Discuz Ucenter同步

2024-08-30 19:06:54
字體:
來源:轉載
供稿:網友

Discuz是Ucenter的一個應用.

Ucenter包含Server和Client,Discuz2.5x 內置有Ucenter server.

下面用Login來討論這是如何實現同步的。

登錄過程

用戶登錄,Dz調用的是 class/class_member.php 中的 on_login()方法,用戶輸入的信息存在一個全局的$_G 數組中。核心內容是

$ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : '';

字面意思理解就是,檢查ucenter中檢查該應用是否開啟同步登陸,開啟則調用uc_user_synlogin().

有童鞋在debug時遇到DZ的$ucsynlogin為空(正常的話應該是一串JS代碼) , 請檢查全局的數組的 allowsynlogin 字段內容是否正確。也可直接忽略這步。將上述代碼改成$ucsynlogin =uc_user_synlogin($_G['uid']);

uc_user_synlogin

跟進該方法后幾個核心方法調用的路線大概如下:

uc_user_synlogin() ==> uc_api_post() ==> uc_fopen2() ==> uc_fopen() ==> fsockopen()

uc_fopen() 位于 client.php 中,從字面的意思看看這個方法就可以知道client利用socket與server建立連接,通知server進行登陸通知,server對通知做處理后返回給client一串加密的JS代碼,client將這串代碼輸出調用后實現對所有其他應用的登錄,從而實現同步登陸,這里用到了P3P.

如果童鞋的uc_user_synlogin無返回值(目測大部分童鞋都是這個問題),大可跟下這個方法,Trace fsockopen()的參數是否正確,正確的話一般來說一定能夠同步登陸的.

這里看到fsockopen()的第一個參數是($ip ? $ip : $host),再F3一下$ip 和 $host,結果發現是配置文件里面的UC_DBHOST和UC_IP,所以大家得注意了,設置了UC_IP的話ucenter client會忽略UC_DBHOST的設置.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 增城市| 天峨县| 凤台县| 新晃| 津南区| 枣强县| 崇阳县| 吐鲁番市| 德阳市| 抚松县| 丰都县| 威信县| 清苑县| 宜兴市| 青岛市| 内黄县| 牡丹江市| 天门市| 庆云县| 蚌埠市| 涪陵区| 洛扎县| 于都县| 柳州市| 陆河县| 南澳县| 恩平市| 辽源市| 乌拉特中旗| 封丘县| 万源市| 建德市| 静宁县| 瑞金市| 桂阳县| 平阳县| 万州区| 葫芦岛市| 周至县| 康保县| 墨江|