首先我们先来了解下 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 一些数据
5uc.php 接收通知并处理 get 过来的数据, 并在函数 synlogin(位于 uc.php 中) 通过函数_authcode 加密数据 (默认以 UC_KEY 作为密钥), 用函数_setcookie 设置 cookie
6 各个应用用对应的密钥解码上面设置的 cookie, 得到用户 id 等数据; 通过这个值来判断用户是否经过其它应用登录过, 从而让用户可以自动登陆
应用程序的 logging.php ------>uc_client 中的 client.php------>Ucenter------> 应用程序中 api/uc.php
其实 Ucenter 实现同步登陆的原理就是 cookie, 一个应用登陆成功之后, 向 Ucenter 传递数据, 让 Ucenter 通知其他的应用也设置 cookie, 这样用户在访问其他应用的时候通过已经设置好的 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 自己会在后台把所有开启同步登陆的应用都给循环遍历一遍 然后 在页面上输出
来源: https://www.php1.cn/detail/php-d08f5caadb.html