有极速快乐十分吗|极速快乐十分走势图|

UCenter的應用整合與單點登錄分析

call_user_func函數
服務器君一共花費了187.988 ms進行了6次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

一直在用康盛的產品,自然少不了單點登陸,最近重新研究了下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,實現成功跨域。

總結:總的來說,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存儲的數據格式。

本文地址:http://www.bavugt.tw/librarys/veda/detail/1506,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.bavugt.tw/librarys/veda/detail/1506

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《代碼整潔之道》 馬丁(Robert C. Martin) (作者), 韓磊 (譯者)

軟件質量,不但依賴于架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。《代碼整潔之道》提出一種觀念:代碼質量與其整潔度成正比。干凈的代碼,既在質量上較為可靠,也為后期維護、升級奠定了良好基礎。作為編程領域的佼佼者,《代碼整潔之道》作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在《代碼整潔之道》中體現為一條條規則(或稱“啟示”),并輔以來自現實項目的正、反兩面的范例。只要遵循這些規則,就能編寫出干凈的代碼,從而有效提升代碼質量。

更多計算機寶庫...

有极速快乐十分吗
上证指数腾讯 股票配资!配资658 贵州11选5 河北快三吧 新疆11选5开奖结 英超直播360 麻将桌 哈尔滨哪里买自动麻将机 微乐麻将怀疑开挂怎么查 今天内蒙古快3走势