単一ログインUcenter分析

3970 ワード

まず、Ucenterのログイン手順について説明します.
1、ユーザーはdiscuzにログインし、loggingを通過する.phpファイルの関数uc_user_loginはpostからのデータ、すなわちusernameとpasswordを検証します.2、検証に成功した場合、uc_に呼び出します.Client下client.phpファイルの関数uc_user_synlogin、この関数でuc_を呼び出すapi_post('user', 'synlogin', array('uid'=>$uid)). 3、それからこの関数はUcenterのindexに向かいます.phpはデータを渡すindex.phpは伝達されたデータを受け入れ,modelがuser,actionがsynloginの値を得た.4、それからUcenterのindex.phpはcontrolディレクトリの下のuserを呼び出す.phpクラスのonsynloginメソッドは、foreachループを通じてjavascriptでucアプリケーションリストで同期ログインを開いたアプリケーションに同期ログインを通知する.すなわち、get方式で各アプリケーションディレクトリのapiの下のucに渡す.phpのいくつかのデータ.5、uc.phpは通知を受信しgetからのデータを処理し、関数synlogin(uc.phpにある)で関数_を通過する.authcode暗号化データ(デフォルトはUC_KEYを鍵とする)、関数_setcookie設定cookie.6、各アプリケーションは、上に設定したクッキーを対応する鍵で復号し、ユーザidなどのデータを得る.この値により,ユーザが他のアプリケーションを介してログインしたか否かを判断し,ユーザが自動的にログインできるようにする.アプリケーションのlogging.php ------>uc_クライアントのクライアントphp------>Ucenter-->アプリケーション内api/uc.php実はUcenterが同期登録を実現する原理はcookieであり、1つのアプリケーションが登録に成功した後、Ucenterにデータを伝達し、他のアプリケーションにもcookieを設定することをUcenterに通知させ、ユーザーが他のアプリケーションにアクセスする際にすでに設定されたcookieを通じて自動登録を実現する.Ucenterの同期原理を理解し、同期してログインできない場合や、UCenterとのインタフェースを開発する場合が多くなります.
まずucenterをインストールしてuc_Clientこのフォルダは自分のプロジェクトにコピーして、それからいくつかのファイルを構成します
client.phpは関数ライブラリに相当
uc.phpはコールバックファイルに相当する
もう一つconfig.inc.phpはプロファイルです
2つのアプリケーションが同期ログインを設定した後、アプリケーションにログインして実行します.
 include './config.inc.php';
   include './uc_client/client.php';
   $usernames="feiye";
   $passwords="789123";
   list($uid, $username, $password, $email) = uc_user_login($usernames, $passwords);
	if($uid > 0) {
	    setcookie("username",$username,time()+intval(24*3600));
		echo uc_user_synlogin($uid);
		echo '    ';
	} elseif($uid == -1) {
		echo '     ,     ';
	} elseif($uid == -2) {
		echo '   ';
	} else {
		echo '   ';
	}

uc_user_synlogin()この関数は、同期して他のすべてのオープン同期ログインにログインする関数uc自身がバックグラウンドですべてのオープン同期ログインのアプリケーションをループしてページに出力することを意味します.

このようなjsコードは、 を するアプリケーション に 、 を するアプリケーション にコールバックファイルucである.phpが すると が われ、 には でコードを くことができますuc.phpコールバックファイルのコードは ずしも らのフォーマットに って く はありません. で のコードを くこともできます. えば、 はsessionに づいて をしています.
function synlogin($get, $post) {
		$uid = $get['uid'];
		$username = $get['username'];
		if(!API_SYNLOGIN) {
			return API_RETURN_FORBIDDEN;
		}
		header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
		setcookie('gwyy',$username,time()+3600,'/','127.0.0.71');
		_setcookie('Example_auth', _authcode($uid."\t".$username, 'ENCODE'));

		$_SESSION['username'] = $username;
		$_SESSION['uid']      = $uid;
	}

	function synlogout($get, $post) {
		if(!API_SYNLOGOUT) {
			return API_RETURN_FORBIDDEN;
		}
		//note      API   
		header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
		_setcookie('Example_auth', '', -86400 * 365);
		unset($_SESSION['username']);
		unset($_SESSION['uid']);
		session_destroy();
	}

これにより、ユーザーが のアプリケーションページをリフレッシュした に にログインします.
UCにアプリケーションを して が しなかった 、 は です.あなたを つけられませんでした.http://xxxx/api/uc.php このファイルはこのファイルさえあれば に するに いない.
はUCの は で、あるアプリケーションがログインした 、バックグラウンドで ログインしたアプリケーションに されたコールバックファイルのコールバックファイルをポーリングしてユーザーIDを した 、cookieまたはsessionを してログインモードに ることです.