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

首頁 > 網站 > 建站經驗 > 正文

UCenter的應用整合與單點登錄實現代碼

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

UCenter的應用整合與單點登錄實現代碼 有需要了解的朋友可參考一下。

一直在用康盛的產品,自然少不了單點登陸,最近重新研究了下ucenter的機制,其實它的基本原理就一句話:跨域設置用戶信息。下面只對用戶登陸做比較詳細說明,其他注冊、PM等操作其實原理差不多。

用戶登陸

do_login.php[uchome]

$passport = getpassport($username, $password);

此處操作調用了uc_client下client.php的

uc_user_login($username, $password);

此函數又調用了

call_user_func(UC_API_FUNC, 'user', 'login', array())

call_user_func回調UC_API_FUNC, 此處為uc_api_mysql函數,即調用 uc_api_mysql函數,后面的'user', 'login', array()是參數。而uc_api_mysql的實質是調用uc_client的controller下的user控制器,然后執行onlogin方法。

該方法則是判斷用戶提交信息是否正確,然后返回對應uc_member表的uid。

總結:

1.uchome的用戶登陸主要通過uc_client進行操作,判斷用戶信息是否正確,最終返回對應于uc表的uid, 供單點登陸用。

2.整合自己應用的時候可以不必這么復雜,登陸完全可以走自己的模式,只是要返回下uc表的uid,供單點登陸用即可。

單點登陸

include 'uc_client/client.php';

uc_user_synlogin($uid);uc_user_synlogin

內部則調用

uc_api_post('user', 'synlogin', array('uid'=>$uid));

uc_api_post函數的作用是將將數據通過socket發送到ucenter。

uc_api_post同時調用uc_api_requestdata和uc_fopen2函數。

uc_api_requestdata構造發送給用戶中心的請求數據。

uc_fopen2遠程打開URL,本質是調用uc_fopen函數,通過 fsockopen遠程打開ucenter/index.php,并且傳遞參數,調用user控制器執行onsynlogin() 方法,onsynlogin()讀取緩存,緩存文件保留有各單點登陸應用的基本信息 [比如bbs supersite的基本信息]。然后循環通過JS調用不同應用下api下的uc.php。

下一步轉移到各應用下的uc.php調用synlogin($get, $post)

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

setcookie();從而實現跨域設置cookie

P3p作用:

比如有2個應用,a.nowamagic.net 和 b.nowamagic.net 另外有個公用的uceter.nowamagic.net,uceter.nowamagic.net通過JS跨域調用a.nowamagic.net b.nowamagic.net,這兩個腳本都做了設置cookie 的功能,但為了跨域,考慮到不同瀏覽器[主要考慮IE6],必須調用P3P,實現成功跨域。Vevb.com

總結:總的來說,UCENTER一站登陸原理是socket遠程打開ucenter,并且傳輸已經登陸的公用UID,ucnter循環通過JS調用各應用下的api,在各個地方設置cookie,而保證cookie通用的則是P3P處理[注意不同應用下的api腳本不一樣,bbs的uc.php不同于uchome的uc.php]。

整合自己的應用

1.下載UCENTER,并且打好UCENTER的數據表,uc_members表的作用是存儲通用的ID數據。

2.在自己的應用下增加uc_client 和 api,這兩個目錄下的文件需要根據實際情況進行更改。

3.進入ucenter的后臺,添加單點登陸的應用。

4.添加單點登陸成功后會出現一些配置信息,在自己的應用下添加config.php, 并且復制配置信息,增加一句 $database = 'mysql';

新版本的UC范例,通信不成功是因為范例目錄下的那個config.inc.php少了這句 $database = 'mysql';

導致連不上 include/下的數據庫類文件。

至此,基本操作已經完成,另外具體情況則按照自己的應用進行不同的操作。

應用整合其他辦法

其實也可以不走單點登陸,全站統一個注冊、登陸接口即可,注意各個應用cookie的前綴要一樣,考慮跨域的話可以用jquery的jsonp,此時的注冊、登陸得自己寫一套,注冊、登陸的模式跟原本應用一樣就可以啦,比如cookie的加密方式、cookie的作用域以及cookie存儲的數據格式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 时尚| 信阳市| 宁陕县| 水富县| 循化| 庐江县| 黄陵县| 沈丘县| 林甸县| 河池市| 正定县| 桂林市| 英超| 鸡西市| 长海县| 东平县| 花垣县| 丽江市| 长泰县| 金乡县| 贵定县| 桦南县| 图们市| 秭归县| 长寿区| 左云县| 长泰县| 揭阳市| 临海市| 赫章县| 寿宁县| 宁津县| 登封市| 寿阳县| 绩溪县| 普兰店市| 东乌珠穆沁旗| 柳河县| 静宁县| 神农架林区| 天峨县|