依附于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与ThinkPHP同步登录实现详解》 在互联网应用开发中,用户登录系统的...通过以上步骤和注意事项,开发者可以有效地实现在 ThinkPHP 应用中与 Discuz 论坛的同步登录功能,提高用户体验,同时简化管理复杂度。
整合discuz与网站的同步登录】 在互联网应用开发中,用户登录体验的统一性和便捷性是提升用户体验的重要一环。Discuz! 是一款广泛应用的社区论坛软件,而许多网站则采用自定义的会员系统。当用户在主站登录后,能够...
- 同步登录是指用户在一个应用或网站登录后,其他关联的应用或子系统也会自动登录。在 Discuz! 7.x 中,这通常是通过统一的身份验证服务实现的,可能涉及到Cookie、Session或者Token机制。 - 当用户在主论坛成功...
java整合discuz论坛同步注册同步登录资源打包,供大家参考参考。
7.2中,实现同步登录的关键是通过Session管理和Cookie来跟踪用户状态。系统会将用户登录信息存储在服务器端的Session中,并在客户端设置一个与Session关联的Cookie。当用户在其他页面或应用中请求时,服务器通过...
在本文中,我们将探讨如何实现Discuz论坛系统的注册同步单点登录功能。这一功能对于多应用集成的环境尤其重要,因为它确保了用户在一个系统注册或登录后,可以无缝地在所有关联子系统中自动登录,提高用户体验。 ...
在互联网社区建设中,Ucenter、Uchome和Discuz! 是三个常见的开源社区软件,它们各自扮演着不同的角色。Ucenter是康盛创想(Comsenz)开发的一个中心化用户管理平台,用于整合各个应用,实现用户数据的一致性。...
主要实现网站登录时能够同步登录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的代码
"完美解决shopex和UC1.6同步登录"的主题涉及到两个关键的软件:ShopEx(一款国内流行的电子商务平台)和UCenter 1.6(Comsenz公司开发的用户中心系统,用于统一管理多个应用的用户账号)。ShopEx与UCenter的同步登录...
总之,"tp3.2和discuz同步登陆代码"的实现是一个涉及跨系统交互和用户身份验证的复杂过程,需要对ThinkPHP和Discuz! 的API有深入理解,同时也需要关注安全性和用户体验。通过这种方式,开发者可以构建出更一体化的...
### Discuz同步登录程序解析 #### 一、概述 本文主要介绍了如何实现Discuz与个人网站之间的同步登录功能。Discuz是一款非常流行的论坛系统,它提供了丰富的插件和API接口来帮助开发者进行二次开发和扩展功能。其中...
综上所述,解决Discuz自动同步登录的问题需要深入理解UCenter的工作原理、Cookie管理、加密解密机制以及环境适应性,同时在开发过程中进行详尽的测试,确保在各种环境下都能正常工作。对于开发者来说,熟悉这些知识...
《ECSHOP对接DISCUZ同步实现详解》 ECSHOP与DISCUZ的对接同步是一项常见的网站集成工作,旨在实现用户在两个平台之间的无缝登录、退出、注册及积分兑换,提升用户体验。本文将详细阐述这一过程的每一步骤。 首先,...
【标题】"Discuz_X3.1与第三方应用同步登录、登出"涉及到的是网站论坛系统Discuz! X3.1版本与外部应用程序之间用户身份验证的集成问题。这一功能使得用户在一个平台上登录后,无需在其他关联的应用上再次输入用户名...
~ ... 类似的代码登录;... 可以嵌入自己的网站代码里实现同步登录。 也可以独立使用注释明确。 3、感谢我自己supFire, 希望大家得到启示, 写出更好的文件共享出来, 也可以写出类似的discuzNT登录整合代码。
论坛系统中进行登录和同步。Discuz! 是一个流行的开源社区论坛软件,它提供了一个平台,让网站管理员可以创建和管理自己的论坛。而通过与新浪微博的集成,用户无需为每个网站单独注册,可以方便地使用已有的社交...
2. **信息同步**:登录后,用户的基本信息(如昵称、头像等)会自动从QQ账号同步到论坛,减少了用户填写资料的步骤。 3. **安全可靠**:通过腾讯的官方API进行身份验证,确保了登录过程的安全性,避免了传统密码...