使用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 相关文章推荐
PHP与已存在的Java应用程序集成
Oct 09 PHP
用PHP将数据导入到Foxmail
Oct 09 PHP
模仿OSO的论坛(二)
Oct 09 PHP
php实现的在线人员函数库
Apr 09 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
PHP实现生成数据字典功能示例
May 24 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加入ftp扩展的解决方法
2013/02/07 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python函数返回值实例分析
2015/06/08 Python
Python中的TCP socket写法示例
2018/05/11 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python标识符命名规范原理解析
2020/01/10 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
学校采购员岗位职责
2014/01/02 职场文书
年级组长自我鉴定
2014/02/22 职场文书
优秀食品类广告词
2014/03/19 职场文书
跳槽求职信范文
2014/05/26 职场文书
教师批评与自我批评
2014/10/15 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python