之前写过一篇和discuz实现同步登陆的文章,不过距离现在时间太长了,虽然大体的机制都没改变,但是现在看那篇文章感觉不详细,好多细节都没说,这不最近又在搞这个同步登陆的问题,就把最近的心得和之前写的联系起来,整理一个完整的,共享出来,欢迎大家拍砖!

第一步:项目摆放

将ucenter下的 api,uc_client,config.inc.php 这三个文件都拷贝到项目的根目录下

第二步:登陆ucenter后台添加应用

接下来登录到ucenter的后台在【应用管理->添加新应用】选择自定义安装

应用名称:填写自己网站名

应用的URL:填自己网站的域名

通信密钥:随便填 但是自己要记住啊 (填完以后必须保证和config.inc.php里面的 define(‘UC_KEY’, ‘刚才填的通信密钥’)的值一致)

应用类型:不是下拉表中的就选其它

是否开启同步登录:是

是否接受通知:是

点击提交

将会生成一段 应用的UCenter 配置信息,将此信息复制到config.inc.php中,将

define(‘UC_CONNECT’, ‘mysql’);    // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen()

// mysql 是直接连接的数据库, 为了效率, 建议采用 mysql

//数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量)

define(‘UC_DBHOST’, ‘localhost’);   // UCenter 数据库主机

define(‘UC_DBUSER’, ‘root’);    // UCenter 数据库用户名

define(‘UC_DBPW’, ”);     // UCenter 数据库密码

define(‘UC_DBNAME’, ‘ucenter’);    // UCenter 数据库名称

define(‘UC_DBCHARSET’, ‘gbk’);    // UCenter 数据库字符集

define(‘UC_DBTABLEPRE’, ‘ucenter.uc_’);   // UCenter 数据库表前缀

//通信相关

define(‘UC_KEY’, ”);    // 与 UCenter 的通信密钥, 要与 UCenter 保持一致

define(‘UC_API’, ‘http://yourwebsite/uc_server’); // UCenter 的 URL 地址, 在调用头像时依赖此常量

define(‘UC_CHARSET’, ‘gbk’);    // UCenter 的字符集

define(‘UC_IP’, ”);     // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值

define(‘UC_APPID’, 1);     // 当前应用的 ID

此段代码覆盖

然后点击应用管理里面显示了

第三步:引用uc文档接口

在项目的相应页面中(根据自己的情况定)引用

include_once ‘config.inc.php’;

include_once ‘/uc_client/client.php’;

这样后就可以随心所欲的应用uc的接口文档啦!

第四步:实现单向登陆

实现从项目登录 ,discuz 也会登录

从项目登出, discuz 也会登出

如果这步不成功,请检查有没有输出同步登录,同步登出的代码。

如果采用的是AJAX登录的话,请把同步登陆登出代码document.write 出来 (未测试,不知道行不行)。

第五步:实现 双向同步登录

下面来说说双向同步的原理

在discuz登录时会产生一些前缀相同的cookie(如 $_COOKIE[‘1qlM_2132_auth’] ),在自己项目上通过检测有没有这个cookie存在就可以得到登录状态

通过简析这个cookie 可以得到 一段加密后的password 和 uid

然后再由uid 去读取 name 等信息 (不知道对不对,在安全性上不知道可不可行)

下面来讲如何简析这个值

首先在cookie 上会有一个值 $_COOKIE[‘1qlM_2132_saltkey’](前缀可能不一样)这个值很重要

然后另外一个值 存放在discuz目录的config的config_global.php文件中的$_config[‘security’][‘authkey’]

把这两个值连接起来再用 MD5 加密就可以得到加密钥匙

然后就  $userMsg = explode(“\t”, uc_authcode($_COOKIE[‘1qlM_2132_auth’], ‘DECODE’, $key)); //得到加了密的password和uid

第六步:举个实例

下边是一个牛人贡献的一个例子,不过是thinkphp的例子但是没多大关系的,思路是相通的,我相信难不倒各位技术大咖的!

注意:您需要在网站顶部 登录 或 注册 后,才能下载资源

资源名称:Ucenter和Thinkphp实现接口同步登陆双向.rar

(下载次数:27次)

提示:此资源由PHP学习网整理或原创,转载请注明。QQ群:66357155

php登录与注册的心得,与discuz实现同步登陆和注册相关推荐

  1. 存在多个不同注册中心的时候,如何平滑的统一注册中心?

    点击关注,赶紧上车 这几天在不同的微信群和社区里连续碰到了一类问题: 比如spring4all的帖子:http://bbs.spring4all.com/thread/21 又比如昨天在秦总的群里也进 ...

  2. 【Discuz】如何实现自动注册登录

    本文实现功能: 1.从原有系统进入论坛自动登录和注册 2.实现弹框在本页面,不进行跳转 3.js在页面加载时直接发起注册请求 这个功能之前使用的uc_user_register这个函数来处理的,但是今 ...

  3. dedecms注册的会员自动激活discuz

    dedecms注册的会员自动激活discuz 弄了一天,问题总算解决了,不过有点投机取巧,下面说下dedecms整合discuz后会员注册后不用激活的实现,以前做站时,一直在想,dede和dz整合后, ...

  4. 【记录】Discuz!论坛防灌水防注册机,清理垃圾会员

    导读: Discuz!是国内最流行的论坛程序(没有之一),用的人也非常的多.Discuz网站的帖子比较容易被搜索引擎收录,因此有不少人开发注册机用来自动注册会员,或者使用灌水软件自动发布帖子.文章.评 ...

  5. 这两天老是有兄弟问到Vue的登陆和注册,登陆成功留在首页,没有登录回到登录页面,现在我用最简单实用的方法实现(两分钟技就看懂)...

    其实登录注册,并且登录一次保持登录的状态,是每个项目都需要实现的功能. 网上也有很多的方法,不过,不是通俗易懂,在这里说一下我自己的方法,非常简单实用 核心就是用localStorage存.取数据,这 ...

  6. android mysql实现登录注册_android简单登陆和注册功能实现+SQLite数据库学习

    android简单登陆和注册功能实现+SQLite数据库学习 发布时间:2018-07-04 17:23, 浏览次数:1027 , 标签: android SQLite 这里我只是建立了一个用简单的存 ...

  7. 登录注册功能的实现详解(多用户名注册、案例补充)

    登录注册功能的实现详解(多用户名注册.案例补充) 案例功能说明 1.可以保存多个注册用户 2.注册时判断用户名是否存在,不存在可注册 3.注册成功后,跳转到登录页面 4.取出cookie里面的值,进行 ...

  8. php ucenter原理,深入挖掘Discuz Ucenter同步登录过程原理分析

    深入挖掘discuz ucenter同步登录过程原理分析,哈哈,其实纯属标题党,主要就是做了一个思路分析而已. Discuz是Ucenter的一个应用. Ucenter包含Server和Client, ...

  9. uc显示无服务器连接,ucenter安装心得和通信失败,同步登陆失败采坑以及解决方法...

    不墨迹,直接说重点:(配置了uc的网站不要再去采集了,否则uid不一致,新用户永远无法同步登录了) 下载系统后留意文件夹里是否带了uc的源码 api是接口文件夹,uc_client是uc的客户端文件, ...

  10. android之利用SQLite数据库实现登陆和注册

    首先,说一下SQLite的概念: SQLite 是一个开源的嵌入式关系数据库,它可以减少应用程序管理数据的开销 , SQLite 可移植性好 . 很容易使用 . 很小 . 高效而且可靠 .目前在And ...

最新文章

  1. php与nginx通讯方式,[Linux]PHP-FPM与NGINX的两种通讯方式
  2. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
  3. sketchup转stl_如何将.obj或.stl文件导入SketchUp的简便方法 - SketchUp自学
  4. 12.2.12 创建有响应的用户界面 捕获异常
  5. .NET Core CLI 的性能诊断工具介绍
  6. 回旋滚动_中频炉电动旋转轴承,管道回旋轴承,电炉旋转轴承
  7. order by 子查询_SQL查询语法
  8. 【Linux】linux grep过滤中,不包含某些字符串
  9. python openpyxl创建excel文件-python之openpyxl生成excel文件
  10. 笑谈ArcToolbox (1) ArcToolbox 的发展方向
  11. cboard centos7安装步骤
  12. list保存到scv
  13. oa项目经验描述_项目经验和总结
  14. is not backed by gradle android,Module … is not backed by gradle
  15. 在电脑上通过手机发短信
  16. 数组,结构体初始化 {0}
  17. 自然语言推理入门:ESIM
  18. Ⅳ JavaScript函数
  19. echarts绘制完整的中国地图
  20. 家长会计算机教师致辞,学科教师在家长会上的讲话稿(精选5篇)

热门文章

  1. Linux-Discuz安装LAMP
  2. iOS LeftMenu抽屉效果与ScrollView共存时的手势冲突
  3. git分支创建分支删除分支合并
  4. 一些实用的DBA语句(持续学习,持续更新)
  5. 笑死人了,要抑制房价的过快上涨?
  6. 微信取消分享后还是执行成功函数
  7. coc java_基于REST+CoC构建Java Web快速开发框架的架构思路
  8. PHP之JWT接口鉴权(二) 自定义错误异常
  9. c语言程序设计数字电位器,数字电位器X9C103 100级调节电路和单片机源程序
  10. java中的triple_无法在使用Java加密的.NET中使用TripleDES进行解密