phpsso注冊流程
1、【phpcms】 判斷是否開啟phpsso子產品 沒開啟報錯
2、【phpcms】 調用 phpcms根目錄/caches/configs/system.php中phpsso_api_url變量 擷取本站要通知的phpsso位址 通過socket方式向phpsso_api_url/index.php?m=phpsso&c=index&a=register送出請求 請求中存放的是通過phpsso_auth_key變量加密的post值
3、【phpsso_server】 判斷是否開啟Ucenter
4、【phpsso_server】 如果開啟Ucenter 判斷發起類型是api還是mysql 如果是mysql 直接插入mysql資料庫中 如果是api 通過socket方式向UC_API/index.php送出請求 并通過UC_KEY加密資料
5、【phpsso_server】 将資料添加到phpsso_server的資料表中
6、【phpsso_server】 添加到消息通知隊清單中
7、【phpsso_server】 phpsso_server目錄/caches/caches_admin/caches_data/applist.cache.php擷取應用清單資訊 并将消息通過socket方式向'url'.'apifilename'位址發送資訊 并通過'authkey'加密
8、【phpcms】 添加至phpcms資料庫中
兩個網站必去要同步使用者表才能登陸
1、 phpcms注冊 則UCenter、phpsso、phpcms存在使用者資料 無法同步到discuz中 需要在discuz也登陸一次。
phpsso同步登陸流程
1、【phpcms】 擷取本地資料庫登入使用者的phpssouid
2、【phpcms】 通過socket調用phpsso_api_url/index.php?m=phpsso&c=index&a=synlogin發送請求 請求參數為phpssouid的值
3、【phpsso_server】 使用socket通路UC_API/index.php m=user a=synlogin
4、【uc_server】 生成 uc_server項目/data/cache/apps.php 中 <script src="['url']/api/['apifilename'] 預設為:uc.php + 參數">
5、【discuz/uc_client】 被['url']/api/uc.php通路 用于設定cookie
【存在其他phpcms】
6、【phpsso_server】 生成 使用socket通路applist.cache.php中 <script src="['url']/api.php?op=phpsso + action=synlogin">
7、【其他phpcms/api.php】 被['url']/api.php?op=phpsso通路 用于設定cookie
8、【phpcms】 生成cookie
9、【phpcms】 使用生成的script标簽用于在不同域中生成cookie
phpsso同步退出流程
1、【phpcms】 通過socket調用phpsso_api_url/index.php?m=phpsso&c=index&a=synlogout發送請求
2、【phpsso_server】 通過socket調用UC_API/index.php m=user a=synlogout 子產品
3、【uc_server】 生成 uc_server項目/data/cache/apps.php 中 <script src="['url']/api/['apifilename'] 預設為:uc.php + 參數">
4、【discuz/uc_client】 被['url']/api/uc.php通路 用于清除cookie
【存在其他phpcms】
5、【phpsso_server】 生成 使用socket通路applist.cache.php中 <script src="['url']/api.php?op=phpsso + 參數">
6、【其他phpcms/api.php】 被['url']/api.php?op=phpsso通路 用于清除cookie
7、【phpcms】 生成cookie
8、【phpcms】 使用生成的script标簽用于在不同域中清除cookie
discuz注冊流程
1、【discuz】 發起向Ucenter的請求 如果discuz項目路徑/config/config_ucenter.php内容中的UC_CONNECT是mysql則直接插入Ucenter資料庫中 如果UC_CONNECT是api 則 請求位址是:discuz項目路徑/config/config_ucenter.php内容中的UC_API.'/index.php?'.'m=user&a=register'
2、【uc_server】 調用 discuz項目路徑/uc_server/control/user.php的onregister方法 向資料庫添加使用者資訊
discuz登入流程
1、【discuz】 發起向Ucenter的請求 請求位址是:discuz項目路徑/config/config_ucenter.php内容中的UC_API.'/index.php?'.'m=user&a=synlogin' post參數為通過UC_KEY加密
2、【uc_server】 調用 discuz項目路徑/uc_server/control/user.php的onsynlogin方法 擷取使用者在UCenter中的資訊 并使用phpsso配置好的authkey加密使用者資訊 設定<script src="$app['url'].'/api/'.$app['apifilename'] 預設為:uc.php.'?time='.$this->time.'&code='加密的使用者資訊">
3、【phpcms/uc_client】 調用$app['url'].'/api/'.$app['apifilename'] 預設為:uc.php 設定cookie
4、【discuz】 生成cookie
5、【discuz】 使用生成的script标簽用于在不同域中設定cookie
discuz退出流程
1、【discuz】 發起向Ucenter的請求 請求位址是:discuz項目路徑/config/config_ucenter.php内容中的UC_API.'/index.php?'.'m=user&a=synlogout' post參數為通過UC_KEY加密
2、【uc_server】 調用 discuz項目路徑/uc_server/control/user.php的onsynlogout方法 擷取使用者在UCenter中的資訊 并使用phpsso配置好的authkey加密使用者資訊 設定<script src="$app['url'].'/api/'.$app['apifilename'] 預設為:uc.php.'?time='.$this->time.'&action=synlogout">
3、【phpcms/uc_client】 調用$app['url'].'/api/'.$app['apifilename'] 預設為:uc.php 清除cookie
4、【discuz】 清除cookie
5、【discuz】 使用生成script标簽用于在不同域中設定cookie
同步退出時遇到的問題 phpcms安裝路徑\phpcms\modules\member\classes\client.class.php中的ps_member_synlogout()方法應改為
public function ps_member_synlogout() {
return $this->_ps_send('synlogout', array('1'));
}
因為 phpcms安裝路徑\phpsso_server\phpcms\modules\phpsso\classes\phpsso.class.php類會判斷你發送的資料是否為空 如果為空則exit(0);是以要給傳一個非空數組
discuz無法同phpcms同步
原因
function uc_user_synlogin($uid) {
$uid = intval($uid);
if(@include UC_ROOT.'./data/cache/apps.php') {
if(count($_CACHE['apps']) > 1) { // 修改為 count($_CACHE['apps'])>0
$return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
} else {
$return = '';
}
}
return $return;
}
同時修改
1、找到discuz目錄下 template\default\member\login.htm,删除
οnsubmit="{if$this->setting['pwdsafety']}pwmd5('password3_$loginhash');{/if}pwdclear =1;ajaxpost('loginform_$loginhash', 'returnmessage_$loginhash','returnmessage_$loginhash', 'onerror');return false;"
2、找到discuz目錄下/source/function/function_message.php ,查找
$param['header'] = true;
替換為
$param['header'] = false;