2. 本站登陆成功后,进行本地化的用户登陆处理,其后验证用户是否登陆只在本地验证。(本地存取登陆用户状态的信息,请设置为关闭浏览器就退出)
3. 当检测用户登陆状态时,请先调用本地的验证处理,若本地验证不通过,再调用UClientSSO::checkUserLogin()方法到用户中心检测用户的登陆状态。
a) UClientSSO::checkUserLogin()方法如下:
<?php
/**
* 用户单点登陆验证函数
*
* @return array - integer $return['status'] 大于 0:返回用户 ID,表示用户登录成功
* 0:用户没有在全站登陆
* -1:用户不存在,或者被删除
* -2:密码错
* -3:未进行过单点登陆处理
* -11:验证码错误
* string $return['username'] : 用户名
* string $return['password'] : 密码
* string $return['email'] : Email
*/
public static function checkUserLogin(){
self::_init();
$ret = array();
$_sessId = self::_getLocalSid();
if (empty($_sessId)) {
//永久记住账号处理
if(isset($_COOKIE[_UC_USER_COOKIE_NAME]) && !empty($_COOKIE[_UC_USER_COOKIE_NAME])) {
//
// 根据cookie里的用户名和密码判断用户是否已经登陆。
//
$_userinfo = explode('|g|', self::authcode($_COOKIE[_UC_USER_COOKIE_NAME], 'DECODE', self::$_authcodeKey));
$username = $_userinfo[0];
$password = isset($_userinfo[1]) ? $_userinfo[1] : '';
if (empty($password)) {
$ret['status'] = -3;
} else {
return self::loginSSO($username, $password, true, true);
}
} else {
$ret['status'] = -3;
}
} else {
//
//本站原先已经登陆过,通过保留的sesson id存根去用户中心验证
//
$_params = array(
'sessId' => $_sessId,
'siteFlag' => self::$site,
'checksum' => md5($_sessId . self::$site . self::$_mcComunicationKey)
);
$aRet = self::_callSoap('getOnlineUser', $_params);
if (intval($aRet['resultFlag']) > 0) {
//成功登陆
$ret = $aRet['userinfo'];
} else {
$ret['status'] = $aRet['resultFlag'];
}
}
return $ret;
}
b) 用户验证中心的webservice服务程序,接收到检验登陆的请求后,调用UCenter::getOnlineUser()方法来处理登陆请求:
[php]/**
* 根据sid,获取当前登陆的用户信息
*
* @param string $sessId - 全站唯一session id,用做ticket
* @return array
*/
/**
* 根据sid,获取当前登陆的用户信息
*
* @param string $sessId - 全站唯一session id,用做ticket
* @return array
*/
static public function getOnlineUser($sessId, $siteFlag) {
self::_init();
session_id(trim($sessId));
session_start();
$ret = array();
$_userinfo = $_SESSION[self::$_ucSessKey];
if (isset($_userinfo['username']) && isset($_userinfo['password']) &&
self::_getUserPassSalt($_userinfo['username'], $_userinfo['password'])) {
$ret['resultFlag'] = "1";
$ret['userinfo'] = $_userinfo;
self::registerLoggedSite($siteFlag, $sessId); //记住已登陆战
unset($ret['userinfo']['salt']);
} else {
$ret['resultFlag'] = "0";
}
return ($ret);
}
?>







