国产探花免费观看_亚洲丰满少妇自慰呻吟_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的設置.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永登县| 苍南县| 柯坪县| 汉川市| 仁怀市| 益阳市| 攀枝花市| 龙门县| 滨海县| 苗栗市| 瑞金市| 阜新| 平昌县| 襄垣县| 蒲江县| 卢氏县| 彭泽县| 贡嘎县| 姚安县| 扶风县| 莱阳市| 鲜城| 兴海县| 蓬安县| 苏尼特左旗| 威海市| 铁力市| 类乌齐县| 崇义县| 新干县| 栾川县| 彭山县| 维西| 清徐县| 秭归县| 松滋市| 平和县| 金昌市| 乌拉特后旗| 墨玉县| 九江市|