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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 八宿县| 古浪县| 呼伦贝尔市| 涟水县| 维西| 高雄县| 监利县| 依兰县| 疏勒县| 文昌市| 望奎县| 巧家县| 资兴市| 民和| 新宁县| 宜春市| 青阳县| 南皮县| 襄城县| 左贡县| 金阳县| 旌德县| 黄骅市| 辽阳县| 赣榆县| 原平市| 隆子县| 安阳市| 瑞昌市| 华安县| 托里县| 万州区| 株洲县| 巴林右旗| 平潭县| 岳西县| 昆明市| 巫山县| 青州市| 科尔| 精河县|