首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>PHP教程>资讯:PHP版单点登陆实现方案

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的内容

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图