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;