当前位置:网络笔记-营销软件破解基地 → 网络资讯 → 网页设计
日期:2009-06-01 19:26:37  来源:本站整理

PHP版单点登陆实现方案

世雄

1. 登陆流程:

用户从打开浏览器开始,第一个登陆的子站点,必须调用UClientSSO::loginSSO()方法。该方法返回全站唯一的随机id用于标识该用户。该随机id在UClientSSO::loginSSO()中已通过本站cookie保存,即该子站点保留了用户已登陆标识的存根于本站。

           a) UClientSSO::loginSSO()方法如下:
[php]/**
* 用户验证中心 登陆用户处理
*
* @param string $username      - 用户名
* @param string $password      - 用户原始密码
* @param boolean $remember     - 是否永久记住登陆账号
* @param boolean $alreadyEnc   - 传入的密码是否已经经过simpleEncPass加密过
*
* @return array   - integer $return['status'] 大于 0:返回用户 ID,表示用户登录成功
*                                                -1:用户不存在,或者被删除
*                                                -2:密码错
*                                                                                                  -11:验证码错误
*                                          string $return['username']     : 用户名
*                                          string $return['password']     : 密码
*                                          string $return['email']        : Email
*/
static public function loginSSO($username, $password, $remember=false, $alreadyEnc=false) {
        self::_init();
        self::_removeLocalSid();
        $ret = array();

        //
        //1. 处理传入webservice接口的参数
        //
        $_params  = array(
                'username' => $username,
                'password' => $alreadyEnc ? trim($password) : self::simpleEncPass(trim($password)),
                'ip'       => self::onlineip(),
                'siteFlag' => self::$site,
                'remember' => $remember
        );
        $_params['checksum'] = self::_getCheckSum($_params['username'] . $_params['password'] .
                $_params['ip'] . $_params['siteFlag'] . $_params['remember']);

        //
        // 2.调用webservice接口,进行登陆处理
        //
        $aRet = self::_callSoap('loginUCenter', $_params);

        if (intval($aRet['resultFlag']) > 0 && $aRet['sessID']) {
                //成功登陆
                //设置本地session id
                self::_setLocalSid($aRet['sessID']);

                //设置用户中心的统一session id脚本路径
                self::$_synloginScript = urldecode($aRet['script']);

                $ret = $aRet['userinfo'];
        } else {

                $ret['status'] = $aRet['resultFlag'];
        }

        return $ret;
}//end of function                   [/php]

         b) 用户验证中心的webservice服务程序,接收到登陆验证请求后,调用UCenter::loginUCenter()方法来处理登陆请求。
[php]/**
* 用户验证中心 登陆用户处理
*
* @param string $username
* @param string $password
* @param string $ip
* @param string $checksum
* @return array
*/
static public function loginUCenter($username, $password, $ip, $siteFlag, $remember=false) {
        self::_init();
        session_start();
        $ret = array();
        $arr_login_res     = login_user($username, $password, $ip);
        $res_login         = $arr_login_res['status'];                //
        $ret['resultFlag'] = $res_login;

        if ($res_login < 1) {
                //登陆失败
        } else {

                //登陆成功
                $_SESSION[self::$_ucSessKey] = $arr_login_res;

                $_SESSION[self::$_ucSessKey]['salt'] =
                        self::_getUserPassSalt($_SESSION[self::$_ucSessKey]['username'], $_SESSION[self::$_ucSessKey]['password']);

                $ret['userinfo'] = $_SESSION[self::$_ucSessKey];
                $ret['sessID']   = session_id();        //生成全站的唯一session id,作为ticket全站通行

                //
                //合作中心站回调登陆接口(设置用户中心的统一session id)
                //
                self::_createCoSitesInfo();
                $uinfo = array();
                $_timestamp = time();
                $_rawCode = array(
                        'action' => 'setSid',
                        'sid'    => $ret['sessID'],
                        'time'   => $_timestamp,
                );
                if ($remember) {
                        $uinfo = array(
                                'remember' => 1,
                                'username' => $username,
                                'password' => $password
                        );
                }

                $ret['script'] = '';
                $_rawStr = http_build_query(array_merge($_rawCode, $uinfo));

                //
                // 合作站点的全域cookie设置脚本地址
                //
                foreach ((array)self::$_coSitesInfo as $_siteInfo) {
                        $_code = self::authcode($_rawStr, 'ENCODE', $_siteInfo['key']);
                        $_src = $_siteInfo['url'] . '?code=' . $_code . '&time=' . $_timestamp;
                        $ret['script'] .= urlencode('');
                }

                //
                // 记住已登陆战
                //
                self::registerLoggedSite($siteFlag, $ret['sessID']);

                unset($ret['userinfo']['salt']);
        }

        return $ret;
}         [/php]

        2. 本站登陆成功后,进行本地化的用户登陆处理,其后验证用户是否登陆只在本地验证。(本地存取登陆用户状态的信息,请设置为关闭浏览器就退出)

        3. 当检测用户登陆状态时,请先调用本地的验证处理,若本地验证不通过,再调用UClientSSO::checkUserLogin()方法到用户中心检测用户的登陆状态。

上一页  [1] [2] [3] [4] 下一页

  • 上一页  [1] [2] [3] [4]  下一页

  • Tags:

    作者:佚名

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接- 网站地图

    Copyright 网络笔记 © 2009-2010 www.WLBIJI.cn . All Rights Reserved.
    我们还在努力  页面执行时间:8,921.87500 毫秒      粤ICP备09052723号
    用我们的软件产品将使您的推广更轻松,同时使您的推广成本降到最低! 站长QQ: 274191541