ucenter通信实现同步登录、同步退出(详细)

首先,需要去官网下载一个ucenter的包。然后解压下来。

先把ucenter/ucenter这个文件夹复制到你的项目根目录下改名为uc_server;(这里只是我建议修改,以便于我下面写的配置);

然后将ucenter/advanced/uc_client复制粘贴到自己的项目上。

在你项目根目录创建一个api的文件夹、把ucenter/advanced/examples/api里头有个uc.PHP复制到你项目的api文件夹下。

其次同样,ucenter/advanced/examples把include文件夹复制到你项目根目录下。(这个呢,是连接数据库的一个类,放进去就可以了什么都不用改)

接下来在你网站根目录下创建一个config.inc.php文件。

[php] view plain copy

  1. <?php
  2. define(‘UC_CONNECT‘, ‘mysql‘);   // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen()
  3. // mysql 是直接连接的数据库, 为了效率, 建议采用 mysql
  4. //数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量)
  5. define(‘UC_DBHOST‘, ‘localhost‘);            // UCenter 数据库主机
  6. define(‘UC_DBUSER‘, ‘root‘);                // UCenter 数据库用户名
  7. define(‘UC_DBPW‘, ‘root‘);                    // UCenter 数据库密码
  8. define(‘UC_DBNAME‘, ‘ucenter‘);                // UCenter 数据库名称
  9. define(‘UC_DBCHARSET‘, ‘utf-8‘);                // UCenter 数据库字符集
  10. define(‘UC_DBTABLEPRE‘, ‘ucenter.uc_‘);            // UCenter 数据库表前缀
  11. //通信相关
  12. define(‘UC_KEY‘, ‘yeN3g9EsNfiaYfodV63dI1j8Fbkssk5HaL7W4yaW4yj4Mf45mfg2v899g451k576‘);                // 与 UCenter 的通信密钥, 要与 UCenter 保持一致
  13. define(‘UC_API‘, ‘http://zd1.t/ucenter/ucenter‘);    // UCenter 的 URL 地址, 在调用头像时依赖此常量
  14. define(‘UC_CHARSET‘, ‘utf-8‘);                // UCenter 的字符集
  15. define(‘UC_IP‘, ‘‘);                    // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值
  16. define(‘UC_APPID‘, 1);                    // 当前应用的 ID
  17. define(‘UC_PPP‘, ‘20‘);
  18. //ucexample_2.php 用到的应用程序数据库连接参数
  19. $dbhost = ‘localhost‘;            // 数据库服务器
  20. $dbuser = ‘root‘;            // 数据库用户名
  21. $dbpw = ‘root‘;                // 数据库密码
  22. $dbname = ‘ucenter‘;            // 数据库名
  23. $pconnect = 0;                // 数据库持久连接 0=关闭, 1=打开
  24. $tablepre = ‘example_‘;           // 表名前缀, 同一数据库安装多个论坛请修改此处
  25. $dbcharset = ‘utf8‘;            // MySQL 字符集, 可选 ‘gbk‘, ‘big5‘, ‘utf8‘, ‘latin1‘, 留空为按照论坛字符集设定
  26. //同步登录 Cookie 设置
  27. $cookiedomain = ‘‘;             // cookie 作用域
  28. $cookiepath = ‘/‘;            // cookie 作用路径

这里根据自己的数据库名称和数据库修改。

然后在你的api/uc.php目录下define(‘IN_DISCUZ‘, TRUE);的上面放入

[php] view plain copy

  1. define(‘UC_CONNECT‘, ‘mysql‘);
  2. define(‘UC_DBHOST‘, ‘localhost‘);
  3. define(‘UC_DBUSER‘, ‘root‘);
  4. define(‘UC_DBPW‘, ‘root‘);
  5. define(‘UC_DBNAME‘, ‘ucenter‘);
  6. define(‘UC_DBCHARSET‘, ‘utf-8‘);
  7. define(‘UC_DBTABLEPRE‘, ‘`ucenter`.uc_‘);
  8. define(‘UC_DBCONNECT‘, ‘0‘);
  9. define(‘UC_KEY‘, ‘yeN3g9EsNfiaYfodV63dI1j8Fbkssk5HaL7W4yaW4yj4Mf45mfg2v899g451k576‘);   // 与 UCenter 的通信密钥, 要与 UCenter 保持一致
  10. define(‘UC_API‘, ‘http://zd1.t/mvc/uc_server‘); // UCenter 的 URL 地址, 在调用头像时依赖此常量
  11. define(‘UC_CHARSET‘, ‘utf-8‘);              // UCenter 的字符集
  12. define(‘UC_IP‘, ‘127.0.0.1‘);               // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值
  13. define(‘UC_APPID‘, ‘1‘);                // 当前应用的 ID
  14. define(‘UC_PPP‘, ‘20‘);

上面的配置根据自己的网站域名自己配置一下。

接下来登录进入你的ucenter,建议添加一个会员admin 不然没法做同步登录,没用户。

通信是很重要的,如果不通信的话,web1网站通信不到你的ucenter 那么你的web2网站也没有数据去给他同步登录。

这两个网站呢 就是我做同步登录的两个网站。 进入编辑

这么弄的话 通信就成功了。 那么通信成功后实现同步登录、同步退出

[php] view plain copy

  1. include_once "./config.inc.php";
  2. include_once "./uc_client/client.php";
  3. <pre>list($uid, $username, $password, $email) = uc_user_login($_POST[‘username‘], $_POST[‘password‘]);
  4. if($uid > 0) {
  5. echo ‘登录成功‘;
  6. echo uc_user_synlogin($uid);
  7. } elseif($uid == -1) {
  8. echo ‘用户不存在,或者被删除‘;
  9. } elseif($uid == -2) {
  10. echo ‘密码错‘;
  11. } else {
  12. echo ‘未定义‘;
  13. }

这里的uc_user_login在你的uc_client/client.php中 这个函数验证登录。验证成功的话返回相对应的值。 可以看看ucenter手册。地址http://www.phpddt.com/manual/ucenter/html/user.htm###

给你们贴个状态码图好了

它返回的一个数组,键值0是你登录用户的id 如果大于0的话就登录成功了。

同步退出的话手册里面也有 个人感觉手册很好阿 写的很详细 可以多看看。

二话不说 继续贴图

退出的话直接echo uc_user_synlogout();就完事了。

同步登陆函数:uc_user_synlogin; 同步退出函数:uc_user_synlogout;

他这两个函数呢 如果执行的话 他会执行一段js代码 你们可以去通信成功那块看一下 直接右键看源代码点地址就可以了。 如果要看具体一些的话,这我就不说了 网上一大推。

相当于他执行这个js代码  去告诉每个应用中的uc.php “我登录了我退出了”;然后uc接收到数据 就将这个数据发送给你的项目。 所以说每个应用你都得放一个uc.php去通信。对吧

到这块呢 基本已经能同步登录和退出了。 两个项目进行同步登录退出的话  按照我这个流程从头再来一遍就完事了。如果要深入理解的话 那就从网上找资料各种理解 各种去看代码吧  反正我是过来了  过程很难过 但是收获很多 ~

时间: 2024-08-29 13:19:42

ucenter通信实现同步登录、同步退出(详细)的相关文章

UCenter 通信失败 和 无法同步登陆的调试方法

1. 看请求 2./uc_server/control/admin/app.php echo "\$url = $url <br />\n \$status = $status<br />\n";die('haha'); 打印下url即可知道哪里错了. UCenter 通信失败 和 无法同步登陆的调试方法,布布扣,bubuko.com

Yii2 多域名跨域同步登录退出

在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend) yun.xxx.com两部分,绑定两个域名, 我们知道在没有绑定域名的时候前后台可以同步登录和退出,但是绑定域名后就失效了,原因是session的作用域不同了. 两个域名的session作用域都只限制在了自己的域名上,我们的解决办法是将不同二级域名的作用域都改成顶级域名xxx.com. 以下部分代码来自网络收集. 在common/config/main.php里面增加如下代码: //跨域sessio

简单分析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接受传

UCENTER同步登录工作原理和配置要点

ucenter的同步登录原理: 1)Ucenter是和uc_client同步的.每个PHP应用,加入了UCENTER后,都会在主目录下有个UC_CLIENT目录.这个目录里,都有一个client.PHP. 2)以我的应用例子来说,我的ecshop系统和discuz系统都加入了ucenter.则ecshop登录时,user.php中的login会检查配置文件,并根据配置最终调用uc_client\client.php中的uc_user_synlogin. 3)uc_user_synlogin会调用

discuz Ucenter第三方双向同步登录

今天按照官网的例子 把ucenter弄下来了,直接用官网的例子,用户注册登录的什么都好使.就是不不能同步登录. 研究了好久才发现  Ucenter_client的注册用户只增加在 pre_ucenter_members 表的的,所以你用ucenter的登录接口可以登录成功,但是 .$ucsynlogin  这个是返回空的,正常应该返回一串javascript来设置cookies,这样discuz也就自动同步登录的. 用接口注册的用户,你去discuz用户管理哪里是看不到的,这个时候新增一个同名的

解决整合 UCenter 首次注册同步登录与自动激活

多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码如 Discuz X 的: $this->db->query("IN

ucenter 同步登录总结

部署: discuz默认安装后就安装了uc_server应用 各应用根目录必须有uc_client文件夹. 下载ucenter程序查看范例程序 应用管理中,应用的主 URL必须指向到应用的根目录,应用接口文件名称,不含路径,默认为uc.php(默认在根目录的api目录下),从而程序会组成 http://localhost/api/uc.php 地址 应用的 UCenter 配置信息:最好和程序中的 config_xxx.php 文件对比下是否是程序自动生成的内容. 可能遇到的问题如下: Disc

ucenter 整合同步登录的内部实现原理及thinkphp整合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接受传递的

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接受传