使用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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
分页显示Oracle数据库记录的类之一
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
个人站长制做网页常用的php代码
Mar 03 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
php 查找数组元素提高效率的方法详解
May 05 PHP
详细解读php的命名空间(一)
Feb 21 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 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 xml-rpc远程调用
2008/12/19 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
JavaScript实现修改伪类样式
2017/11/27 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python教程之全局变量用法
2016/06/27 Python
Python 字典与字符串的互转实例
2017/01/13 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
浅谈Python NLP入门教程
2017/12/25 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
pandas 数据类型转换的实现
2020/12/29 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
安全资料员岗位职责
2013/12/14 职场文书
士力架广告词
2014/03/20 职场文书
婚前协议书
2014/04/15 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
第一书记观后感
2015/06/08 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python