依附于Discuz UCenter的子应用都会有一个选项:
意思很明白了,那它是如何实现的呢?
UC/Control/user.php中有一个synlogin方法,这里就是
处理同步登录的。
function synlogin() {
$this->init_input();
$uid = $this->input('uid');
if($this->app['synlogin']) {
if($this->user = $_ENV['user']->get_user_by_uid($uid))
{
$synstr = '';
//循环每个需要进行通信得应用
foreach($this->cache['apps'] as $appid => $app) {
if($app['synlogin'] && $app['appid'] != $this->app['appid'])
{
//利用js模拟访问站点(页面),实现登录
$synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&password='.$this->user['password']."&time=".$this->time, 'ENCODE', $app['authkey'])).'" reload="1"></script>';
}
}
return $synstr;
}
}
return '';
}
当调用该方法时,实际上会去调用该应用下
api/uc.php文件,将用户名、密码及时间戳做为参数传递。
以上是实现的第一步。
第二步,当应用接收到UC的请求后,会调用uc_note类中的synlogin方法,
该方法的核心是送一个P3P的HTTP头,然后种下COOKIE。
//生成dz认证密钥
$discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
//发送p3p头信息
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
$uid = intval($uid);
$query = $this->db->query("SELECT username, uid, password, secques FROM ".$this->tablepre."members WHERE uid='$uid'");
if($member = $this->db->fetch_array($query)) {
_setcookie('sid', '', -86400 * 365);
_setcookie('cookietime', $cookietime, 31536000);
_setcookie('auth', _authcode("$member[password]\t$member[secques]\t$member[uid]", 'ENCODE', $discuz_auth_key), $cookietime);
} else {
_setcookie('cookietime', $cookietime, 31536000);
_setcookie('loginuser', $username, $cookietime);
_setcookie('activationauth', _authcode($username, 'ENCODE', $discuz_auth_key), $cookietime);
}
对于Disucz这种基于COOKIE验证的应用来说,就实现了同步登录
分享到:
相关推荐
Discuz通过Ucenter与ThinkPHP应用之间的同步登录解决方案
源码 最近在整合discuz与网站的同步登录, 经过几天的调试,找资料终于成功了, 在这里,把源码发布出来,供大家分享~ 虽然网站有很多帮助说明,但整合起来,还是费力~
java整合discuz论坛同步注册同步登录资源打包,供大家参考参考。
自己写的小测试例子。discuz7.x同步登录,退出,修改密码
主要实现网站登录时能够同步登录Discuz(PHP)论坛,同时实现同步注册、修改、用户删除、登出等功能,网站引用DS.Web.UCenter.dll即可,并附带dll的源码和UCenter的配置说明文档。
修改其登录API,达到用email登录的效果(之前的是uid和username) II.注意: 1.确保 UCenter 版本为 1.6.0 2.确保应用于UCenter通信成功,且可以使用API III.使用方法: 1.拷贝下载的文件到应用程序的uclient目录...
Discuz 自动同步登陆通达OA的完美解决办法,自己看了一下UCenter、Discuz同步登陆的机制,提炼出了以下用于同步登陆Discuz的代码
自己写的小测试例子。discuz7.x同步登录,退出,修改密码
完美解决shopex和UC1.6同步登录 discuz x
ucenter,uchome,discuz同步注册免激活同步登录 覆盖相应文件即可,如需了解更改内容可先比对文件。
~ ... 类似的代码登录;... 可以嵌入自己的网站代码里实现同步登录。 也可以独立使用注释明确。 3、感谢我自己supFire, 希望大家得到启示, 写出更好的文件共享出来, 也可以写出类似的discuzNT登录整合代码。
discuz做系统集成时,注册数据时,不能同步向子系统添加数据,及注册后不能及时登录,该文档解决该问题。
将ecshop对接discuz ,并实现同步登录、退出、注册,实现积分的相互兑换
利用discuz的用户中心,实现 thinkphp 和discuz 同步登陆/退出/注册等
这里是根据discuz源代码分析出来的自动登陆,如果是个人做的网站想同步 discuz的同步登陆 就按照这个程序,就可以了, 至于里面的函数 都在discuz的 程序文件中,吧下横线去掉,传对参数一定能同步登陆
最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目...。 Uenter是Comsenz旗下各个产品之间信息直接传递的一个...
UCenter作为整合用户的这样一个开源插件,对于PHP开发的,甚至其它开发语言如.net,java.asp等开发人员解决多个项目整合到一起,用户进行同步登录,同步退出等,同步消息等都是非常有用的。下面分享下以前整合项目中...
Discuz整合ECShop实现会员同步
无需激活直接同步登入discuz,测试版本:discuz! x3,理论也支持2.5,大家测试再用吧