phpuc
‘壹’ Discuz,论坛的数据库配置文件是哪个
1、首先,利用Discuz管理权限账户登入Discuz论坛管理后台。
‘贰’ ucenter通信原理分析
用户登录Discuz,通过logging.php中的函数uc_user_login对提供的用户名和密码进行验证。如果验证通过,将调用uc_client下client.php的函数uc_user_synlogin。接着,该函数会调用uc_api_post('user', 'synlogin', ['uid' => $uid]),并将数据传递给Ucenter的index.php。index.php收到数据后,获取model为'user',action为'synlogin'的值。随后,Ucenter的index.php调用control目录下的user.php类中的onsynlogin方法,通过javascript方式通知开启同步登录的应用进行同步登录,即通过get方式将数据传递给应用目录中api下的uc.php。uc.php接收通知并处理get过来的数据,使用函数_authcode加密数据(默认以UC_KEY为密钥),并使用函数_setcookie设置cookie。各个应用使用对应的密钥解码cookie,获取用户id等信息,以此判断用户是否已通过其他应用登录,实现自动登录。
Ucenter通过cookie实现同步登录。用户在任一应用成功登录后,向Ucenter发送数据,Ucenter随后通知其他应用设置cookie,从而在用户访问其他应用时,通过已设置的cookie实现自动登录。
为了实现Ucenter同步登录功能,首先需要安装Ucenter,并将uc_client文件夹复制到项目中。接着,配置相关文件。client.php作为函数库,uc.php作为回调文件,config.php作为配置文件。
当你拥有两个应用并设置同步登录时,登陆其中一个应用执行以下代码:include ‘./config.inc.php';include ‘./uc_client/client.php';$usernames="kyee";$passwords="123456";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()函数代表同步登录到其他所有开启同步登陆的应用。Ucenter会在后台遍历所有开启同步登陆的应用,并在页面上输出以下javascript代码:
<script type="text/javascript" src="http://www.lihuai.net/wp-content/uploads/sp/uc.php?time=1408327309&code=bc6bFLa6WH343nin2GAn%%2FfQ1GK6FS%2BqJqi2AxVG2Oq1pD9c1wZy%" reload="1"></script>
<script type="text/javascript" src="http://www.lihuai.net/wp-content/uploads/sp/uc.php?time=1408327309&code=206flCqeb%2Faft%%2BkebI7uLm58atk8Ex4sKBj%2FfDkjH%2F8z" reload="1"></script>
这些javascript代码将发送给每个开启同步登陆的应用,每个应用的回调文件uc.php接收到数据后,进行解密并处理,实现自动登录功能。Ucenter的同步登录原理简单,某个应用登陆后,后台轮询发送给同步应用的回调文件,回调文件接收用户ID后,生成cookie或session,进入登录模式。