1.ucenter gps_ucenter_
2.UCenter单点登录/同步登录/同步登出实例_PHP教程
3.Ucenter源码解析之--index.php
4.ucenterhome不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
5.å¦ä½å©ç¨ucenterå®ç°åç¹ç»å½
ucenter gps_ucenter_
访问康盛官网下载最新版本的支持UCenter 1.6.0,下载后解压并安装,源码e源仅需将upload目录内的支持文件进行安装。随后,源码e源将advanced目录下的支持uc_client目录、advanced/examples/目录下的源码e源小米理财源码api目录、include目录以及文件config.inc.php复制至您的支持网站根目录。
建议清空config.inc.php文件内的源码e源代码,后续将指导如何在该文件中进行配置。支持登录UCenter后台,源码e源在应用管理中添加新应用,支持完成提交并添加后,源码e源找到位于页面底部的支持代码。将这些代码复制至config.inc.php文件中,源码e源覆盖文件内的支持原有内容。
在config.inc.php文件末尾加入以下代码:
$dbhost = UC_DBHOST; // 服务器地址
$dbuser = UC_DBUSER; // 数据库用户名
$dbpw = UC_DBPW; // 数据库密码
$dbname = UC_DBNAME; // 数据库名
$pconnect = 0; // 指定是否使用持久连接(0表示关闭,1表示开启)
$tablepre = UC_DBTABLEPRE; // 表名前缀
$dbcharset = UC_DBCHARSET; // MySQL字符集,支持 'gbk'、'big5'、websocket在线聊天源码'utf8'
在同步登录Cookie设置部分:
$cookiedomain = ''; // Cookie作用域
$cookiepath = '/'; // Cookie作用路径
回到应用管理界面,您将看到应用列表中已添加的应用。
同步注册与登录功能已在应用中实现。使用UCenter的统一注册函数uc_user_register()注册用户。如果注册成功,返回用户ID,接着在应用中同步写入数据。注册时需引入config.inc.php和uc_client/client.php两个文件(确保引入顺序正确)。
登录过程使用以下代码:
执行以下代码以登录:
list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']);
检查返回的$uid是否大于0。若$uid等于-1表示用户不存在;$uid等于-2表示密码错误;其他小于0的值表示未定义。若$uid大于0,表示UCenter系统内存在该用户,接着需判断应用内是否也存在该用户。若存在,则设置用户登陆状态,并调用全局登陆方法。
同步退出功能通过调用以下代码实现:
$ucsynlogout = uc_user_synlogout();//同步退出代码
UCenter单点登录/同步登录/同步登出实例_PHP教程
UCenter同步流程:
前提条件是需要在Ucenter上添加好需要同步登录的应用(至少2个才能看到效果),并且显示通信成功。大学社团网站源码例如,我添加了A和B两个应用网站。 1. 当A站登录时,登录成功后,实质上是调用uc_client提供的方法向UCenter获取2个脚本代码(A、B站),这两个脚本代码就是访问A、B两个站的api/uc.php中的登录方法,可以在方法中做登录所需session和cookie操作。 2. 当登出时,操作和登录是一样的,都需要向UCenter获取2个脚本代码,目的是用来触发A、B站的api/uc.php中登出方法。 重点:当获取到2个脚本代码后一定需要在输出让浏览器运行,否则将不会实现同步登录登出。 建议:在开发调试的时候,借助浏览器监控来查看返回输出值,u3drpg源码我当时用的是chrome F后打开Network标签。单点登录概念详解:
单点登录(Single Sign-On, SSO)意味着几个站点共用一个用户中心,实现同步登陆,同步退出。服务器端操作:
Loog SSO,即服务器端进行单点登录处理。客户端操作:ucenter
说实话,dz的商业化确实让php技术发展了不少。Ucenter基本原理:
实际上,最终还是由用户去登录,只是采用了ajax方式,用户不会发现。具体程序示例:
config.php文件中包含了Ucenter的配置信息,如数据库连接方式、主机、用户名、密码、数据库名、微信群发助手 源码字符集、表前缀、通信密钥、URL地址、字符集、IP、应用ID、域名等。 在ucenter后台中添加一个应用时,记得设置与config.php中一致的UC_KEY。 在主目录下的api/uc.php文件中,需要填写应用URL,例如应用url为http://www.bKjia.c0m,则对应为http://www.bKjia.c0m/api/uc.php。 同步登录的关键在于访问各个应用的uc.php文件,dz已经提供了示例。同步登录代码示例:
在你的代码中,需要包含配置文件和uc_client/client.php文件。 验证登录部分,调用uc_user_login和uc_user_synlogin方法进行登录和同步登录操作。 利用康盛的解决方案,通过PHP实现CMS和ucenter的通信,同时利用p3p头实现不同域名下的单点登录。 然而,当应用数量较多时,使用ajax客户端请求可能会影响登录速度,这时可以考虑使用七夜的Loong SSO。 通过了解上述知识,可以轻松实现PHP CMS和Ucenter之间的通信。Ucenter源码解析之--index.php
安装ucenter后,输入域名默认加载index.php。若无参数输入,跳转至根目录的admin.php。此过程,$m与$a为接收参数,$m指示将实例化的类,$a指示调用的method。例如,$m=user, $a=login,加载/control/user.php,实例化'usercontrol'类,执行'onlogin()'方法。
引入模型文件时,优先使用/release/下的文件,否则使用/model下的文件。若$m与$a存在,动态调用特定方法。m主要包含app、frame、user等,对应/control下的文件。
加载对应的control文件,获取类名并实例化,调用方法前,判断类是否存在该方法,优先尝试'on.$a'方法,若不存在,则使用_call($method)调用。
m实例化成相应对象,$a决定对应类的方法实现。测试$m=app, $a=add时,结果如右侧图。查阅/control/app.php下的'onadd()'方法,了解返回-1的原因。
index.php中addslash函数的运用,是安全措施之一,用于处理PHP6以上版本的变动。因php6废弃了MAGIC_QUOTES_GPC,服务器不再自动转义$_POST, $_GET, $COOKIE等客户端数据。因此,需要手动使用addslashes进行转义,确保单引号'、双引号",/等特殊字符不引发SQL注入问题。
ucenterhome不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
在分析和排查过程中,发现了问题源于万网的L1主机不支持fsockopen函数,导致在文件uc_client/client.php中的uc_fopen函数出现故障。原本的代码如下:
这段代码尝试解析URL,并通过fsockopen函数进行HTTP请求。然而,在L1主机环境下,fsockopen函数不可用,导致通讯问题。为了解决此问题,利用了支持的curl功能,通过修改uc_fopen函数,替换为curl请求,代码如下:
新的代码采用curl_init, curl_setopt等函数来实现HTTP请求,具体如下:
通过使用curl,成功解决了ucenter home与modoer之间的通讯问题。在uc_client/client.php和uchome下的uc_cilent/client.php文件中对uc_open函数进行了相应修改。初次使用curl,得益于网络上的丰富资源,实施过程顺利。不过,此修改可能影响其他功能,需要进一步测试验证。
总结,本文介绍了ucenter home在特定环境下遇到通讯问题的解决策略,即通过切换到curl实现与modoer的通讯。希望对PHP教程感兴趣的朋友有所帮助。
å¦ä½å©ç¨ucenterå®ç°åç¹ç»å½
é¦å æ们å æ¥äºè§£ä¸ Ucenterç»å½æ¥éª¤
1ãç¨æ·ç»å½discuzï¼éè¿logging.phpæ件ä¸çå½æ°uc_user_login对postè¿æ¥çæ°æ®è¿è¡éªè¯ï¼ä¹å°±æ¯å¯¹usernameåpasswordè¿è¡éªè¯ã
2ãå¦æéªè¯æåï¼å°è°ç¨ä½äºuc_clientä¸client.phpæ件ä¸çå½æ°uc_user_synloginï¼å¨è¿ä¸ªå½æ°ä¸è°ç¨ uc_api_post('user', 'synlogin', array('uid'=>$uid))ã
3ãç¶åè¿ä¸ªå½æ°ååUcenterçindex.phpä¼ éæ°æ®,index.phpæ¥åä¼ éçæ°æ®ï¼è·å¾model为userï¼action为synloginçå¼ã
4ãç¶åUcenterçindex.phpè°ç¨controlç®å½ä¸çuser.phpç±»ä¸çonsynloginæ¹æ³ï¼éè¿foreach循ç¯ï¼ä»¥javascriptçæ¹å¼éç¥ucåºç¨å表ä¸å¼å¯åæ¥ç»éçåºç¨è¿è¡åæ¥ç»å½ï¼å³éè¿getæ¹å¼ä¼ éç»å个åºç¨ç®å½ä¸apiä¸çuc.phpä¸äºæ°æ®ã
5ãuc.phpæ¥æ¶éç¥å¹¶å¤çgetè¿æ¥çæ°æ®ï¼å¹¶å¨å½æ°synloginï¼ä½äºuc.phpä¸ï¼éè¿å½æ°_authcodeå å¯æ°æ®ï¼é»è®¤ä»¥UC_KEYä½ä¸ºå¯é¥ï¼ï¼ç¨å½æ°_setcookie设置cookieã
6ãå个åºç¨ç¨å¯¹åºçå¯é¥è§£ç ä¸é¢è®¾ç½®çcookieï¼å¾å°ç¨æ·idçæ°æ®ï¼éè¿è¿ä¸ªå¼æ¥å¤æç¨æ·æ¯å¦ç»è¿å ¶å®åºç¨ç»å½è¿ï¼ä»è让ç¨æ·å¯ä»¥èªå¨ç»éã
åºç¨ç¨åºçlogging.php ------>uc_clientä¸çclient.php------>Ucenter------>åºç¨ç¨åºä¸api/uc.php
å ¶å®Ucenterå®ç°åæ¥ç»éçåçå°±æ¯cookieï¼ä¸ä¸ªåºç¨ç»éæåä¹åï¼åUcenterä¼ éæ°æ®ï¼è®©Ucenteréç¥å ¶ä»çåºç¨ä¹è®¾ç½®cookieï¼è¿æ ·ç¨æ·å¨è®¿é®å ¶ä»åºç¨çæ¶åéè¿å·²ç»è®¾ç½®å¥½çcookieå®ç°èªå¨ç»éãäºè§£äºUcenterçåæ¥åçï¼åéå°æ æ³åæ¥ç»éï¼æè å¼åä¸äºä¸UCenteræ¥å£çæ¶åå°±ä¼å®¹æå¾å¤ã
大è´æ¥éª¤ é¦å æ们è¦å å®è£ ucenter ç¶åæuc_client è¿ä¸ªæ件夹å¤å¶å°èªå·±ç项ç®éé¢å» ç¶åå¢å¨é ç½®å 个æ件
client.phpç¸å½äºå½æ°åº
uc.phpç¸å½äºåè°æ件
è¿æä¸ä¸ª config.inc.php æ¯é ç½®æ件
å½ä½ æ2个åºç¨é½è®¾ç½®äºåæ¥ç»éä¹å å½ä½ ç»éä¸ä¸ªåºç¨ ç¶åæ§è¡
[php] view plain copy
include './config.inc.php';
include './uc_client/client.php';
$usernames="feiye";
$passwords="";
list($uid, $username, $password, $email) = uc_user_login($usernames, $passwords);
if($uid > 0) {
setcookie("username",$username,time()+intval(*));
echo uc_user_synlogin($uid);
echo 'ç»å½æå';
} elseif($uid == -1) {
echo 'ç¨æ·ä¸åå¨,æè 被å é¤';
} elseif($uid == -2) {
echo 'å¯ç é';
} else {
echo 'æªå®ä¹';
}
uc_user_synlogin() è¿ä¸ªå½æ° 代表ç è¦åæ¥ç»éå°å ¶ä»ææå¼å¯åæ¥ç»éçå½æ° ucèªå·±ä¼å¨åå°æææå¼å¯åæ¥ç»éçåºç¨é½ç»å¾ªç¯éåä¸é ç¶å å¨é¡µé¢ä¸è¾åº
[html] view plain copy
<script type="text/javascript" src="http://.0.0./api/uc.php?time=&code=fdIufn%2B2YwkQlN9PFEHOfZvDJupvgBgaRPn7R0DJmbEwCbvKwO1uaeybLq3HZhtokoZrnqu7NGijzsdrFCbLDiSpKhk6PMftBRA3vp4yIswhrPMl1dXo5ajB7CVZ9F8EI%2BkdFfq0E0rdyeRkuz8goeHhg" reload="1"></script>
[html] view plain copy
<script type="text/javascript" src="http://.0.0./api/uc.php?time=&code=ag8SepQwwfA3C1uN1sPhC4v6yuER1jFbVTQMK%2BQZmTkjwOz8X%2B8rWgNmKdhlXe9XXVQqAkDjNCK6BMAZpLoiSW4wuNnxHAB9xXLt2VExuyfMnEHAC%2BUdjwbsbXGcYUpM4Bmzdm3QObSp0Kk2qCdfqg" reload="1"></script>
类似è¿ç§çjs代ç å°±æ¯åéç»æ¯ä¸ªå¼å¯åæ¥ç»éçåºç¨ ç¶å æ¯ä¸ªå¼å¯åæ¥ç»éçåºç¨ ç åè°æ件 uc.php æ¥åå°å ä¼è¿è¡è§£å¯ 解å¯å¥½å å ¶å® ä½ å°±å¯ä»¥èªå·±æ¥å代ç äº è¿ä¸ªuc.phpåè°æ件ç代ç ä¸ä¸å®éè¦æç §ä»ä»¬çæ ¼å¼æ¥å ä½ ä¹å¯ä»¥èªå·±åä½ èªå·±ç代ç æ¯å¦è¯´æå°±æ¯æ ¹æ®sessionæ¥ååæ¥ç»éç
[php] view plain copy
function synlogin($get, $post) {
$uid = $get['uid'];
$username = $get['username'];
if(!API_SYNLOGIN) {
return API_RETURN_FORBIDDEN;
}
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie('gwyy',$username,time()+,'/','.0.0.');
_setcookie('Example_auth', _authcode($uid."\t".$username, 'ENCODE'));
$_SESSION['username'] = $username;
$_SESSION['uid'] = $uid;
}
function synlogout($get, $post) {
if(!API_SYNLOGOUT) {
return API_RETURN_FORBIDDEN;
}
//note åæ¥ç»åº API æ¥å£
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
_setcookie('Example_auth', '', - * );
unset($_SESSION['username']);
unset($_SESSION['uid']);
session_destroy();
}
è¿æ · å½ç¨æ·å·æ°äºå«çåºç¨é¡µé¢ä¹å å°±èªå¨ç»éäº