当前位置: 首页 > news >正文

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均登录成功。用户从www.phpernote.com/bbs登录后, 跳到www.phpernote.com/同样显示登录。因为bbs 和news系统在后台均已登录。

 

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

转载于:https://www.cnblogs.com/icyy/p/4561878.html

相关文章:

  • ActionBar 通用方法
  • iOS设计模式——Category和 Extension
  • Visual studio 2013 bug:visual studio no editoroptiondefinition export found for the given option nam
  • 使用 CountDownLatch 控制多个线程执行顺序
  • 记事本
  • BZOJ 2654: tree( 二分 + MST )
  • 【学习笔记】【C语言】循环结构-for
  • android-auto-scroll-view-pager
  • 《C语言 学生成绩管理系统》
  • 2015 Objective-C 三大新特性
  • 面试题之spring
  • base64:URL背景图片与web页面性能优化
  • 《大道至简》阅读笔记一
  • 机器学习的数学基础(1)--Dirichlet分布
  • 八大算法思想
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • angular学习第一篇-----环境搭建
  • C++类的相互关联
  • CentOS6 编译安装 redis-3.2.3
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java面向对象及其三大特征
  • js中forEach回调同异步问题
  • Redis学习笔记 - pipline(流水线、管道)
  • Sass 快速入门教程
  • 闭包,sync使用细节
  • 测试如何在敏捷团队中工作?
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 聊一聊前端的监控
  • 每天一个设计模式之命令模式
  • 你真的知道 == 和 equals 的区别吗?
  • 前言-如何学习区块链
  • 如何胜任知名企业的商业数据分析师?
  • 算法---两个栈实现一个队列
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 硬币翻转问题,区间操作
  • 函数计算新功能-----支持C#函数
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​马来语翻译中文去哪比较好?
  • #FPGA(基础知识)
  • #pragma预处理命令
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.ajax,axios,fetch三种ajax请求的区别
  • (Note)C++中的继承方式
  • (SpringBoot)第七章:SpringBoot日志文件
  • (独孤九剑)--文件系统
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (算法)Travel Information Center
  • (一)RocketMQ初步认识
  • (转)winform之ListView
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET Core Web APi类库如何内嵌运行?
  • .Net Remoting(分离服务程序实现) - Part.3