PHP版单点登陆实现方案的实例(2)

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); } ?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e77ba95b3b313c6282a0a606cef33d08.html