栏目导航
热点推荐
- 开发者必备,超实用的PHP代码片
- 提高PHP编程效率的53种方法
- PHP精华的代码收藏
- PHP.ini配置文件(中文)
- PHP如何防止注入及开发安全
- 提高PHP编程效率的53个要点
- 实际开发中可能用到的PHP的字符
- PHP无限分类的原理
- PHP验证码类代码( 最新修改,完全
- PHP判断端口是否打开的代码
- PHP网站转移实战经验之谈
- phpMyAdmin配置文件说明
阅览排行
PHP版单点登陆实现方案
www.jz123.cn 2009-05-25 来源: PHPChina 责任编辑(袁袁) 我要投递新闻
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;
} [/php]
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);
} [/php]
上一篇:PHP写采集心得 下一篇:在HTML中利用js调用php的内容