使用ucenter实现多站点同步登录的讲解


Posted in PHP onMarch 21, 2019

做Web开发经常会要求实现多站点同步登录的情况,对于PHP开发来说,我们可以使用ucenter来实现多个站点同时登陆同时退出,用户同步的功能。下面我们一起看一下ucenter是如何实现同步登陆的。

首先站点都要引入一个uc_client这样一个客户端,以登陆为例,登陆时首先会调用一个外部函数,uc_client/client.php下的uc_user_login检查是否存在此用户,如果正确则继续执行登陆代码,检测此用户过程:通过用户是以什么方式连的uc(mysql还是http post)然后去相应地用不同函数来检测用户,检测完成后实现本地登陆,代码自己写,然后让其他应用程序也登陆,此时调用外部函数uc_user_synlogin,过程如下:

Uc_user_synlogin调用uc_api_post来实现是要做哪个模块,比如现在就是user模块,传的参数是user_id,具体这是怎么实现的没再仔细看,总之是将数据发送到uc_api即你的ucenter地址的index.php,同时附一些参数,根据这些参数然后再去读里面所有可通信的应用程序,让他们也实现登陆,这是其他程序的事儿了。

通知其他应用程序主要是通过ucenter,去向各应用程序下的api/uc.php发送一些数据,这些数据由uc.php接到请求然后去执行相应的登陆操作等。

下面举个例子描述一下整个过程

1.用户xxx在某一应用程序的login.php,输入用户名,密码。先用uc_user_login函数到uc server验证此用户和密码,如正确,则写入session,写入cookies,并更新应用程序会员表中的登录ip,登录时间。用户感觉不到这个过程。

2.然后通过uc_user_synlogin通知uc server 用户xxx登录成功,这个过程可能使用ajax,用户感觉不到通知过程。

3.uc server收到这个消息后,马上命令手下,把xxx登录的消息,像令牌环一样,发给所有愿意接收(后台中那个是否开启同步登录)这个消息的其它应用程序。其实就是带参数访问一下各应用程序的uc.php,用户感觉不到这个过程。

4.各应用程序靠api下的uc.php来接收uc server发来的消息,并对uc server言听计从,让干什么就干什么。现在,收到让xxx用户在你的程序中登录的命令,马上执行。并写本应用程序的session,并且使用p3p, 写入相同域或不同域的cookies.  用户感觉不到这个过程。

5.最后所有和uc整合的程序,xxx均登录成功。用户从3water.com登录后, 跳到3water.com同样显示登录。

6.应用程序与uc server的会话结束。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
PHP url 加密解密函数代码
Aug 26 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
提高php编程效率技巧
Aug 13 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 PHP
php代码检查代理ip的有效性
Aug 19 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP数据库处理封装类实例
Dec 24 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
laravel5.6实现数值转换
Oct 23 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 #PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
Mar 21 #PHP
启用OPCache提高PHP程序性能的方法
Mar 21 #PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 #PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 #PHP
PHP实现的数据对象映射模式详解
Mar 20 #PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 #PHP
You might like
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
初识ThinkPHP控制器
2016/04/07 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
详解Python的单元测试
2015/04/28 Python
python实现清屏的方法
2015/04/30 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
Python的多维空数组赋值方法
2018/04/13 Python
详解python3中zipfile模块用法
2018/06/18 Python
替换python字典中的key值方法
2018/07/06 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
《狼》教学反思
2014/03/02 职场文书
贷款担保书
2015/01/20 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android