|  | 
 
| 在围绕 Discuz 进行二次开发是,很多场景都要求用户权限,即登录后才允许进行相关操作,操作结束后还需要登出系统以确保安全性。 
 以下分别介绍登录和登出的具体操作方法。
 
 1、登录
 登录流程:
 a,前端页面通过表单将用户名、密码提交到后台对应模块,然后调用函数 userlogin 处理用户提交的用户名和密码,返回值是一个数组;
 b,如果用户名密码验证成功,则数组中保存了用户的相关信息,可以通过 uid 值来判断是否登录成功,uid > 0 则表示登录成功,uid 值即用户在 UCenter 中的 ID 号。
 c,如果用户名密码验证失败,则 uid 值小于0,且不同的负值表示不同的错误类型。
 d,接着还需要 setloginstatus 函数设置用户登录状态,最后根据需要跳转到指定的页面。
 
 1.1 登录代码实例
 
 1.2 userlogin 参数复制代码require libfile('function/member');
$result = userlogin($_GET['username'], $_GET['password'], '', '', '', $_G['clientip']);
$uid = $result['ucresult']['uid'];
 $username,用户名/邮箱/UID复制代码function userlogin($username, $password, $questionid, $answer, $loginfield = 'username', $ip = '')
$password,用户密码
 $questionid,用户设置的验证问题ID
 $answer,用户设置的验证问题对应的答案
 $loginfield,username 参数的类型,默认是 username,还可以是 uid,email 或者 auto,如果是 auto,将自动按 UID、E-mail、用户名的顺序逐一去匹配。
 $ip,登录时用户的IP地址
 
 1.3 userlogin 返回值
 
 复制代码Array
(
    [ucresult] => Array
        (
            [email] => chenyuan@lystrong.com
            [password] => e6879336e671bca2ca9c1695ba0a2eee
            [username] => Mark.Chen
            [uid] => 1
        )
    [member] => Array
        (
            [uid] => 1
            [email] => chenyuan@lystrong.com
            [username] => Mark.Chen
            [password] => 40e0f1de77045975ca9e1e5a85ea6d1c
            [status] => 0
            [emailstatus] => 0
            [avatarstatus] => 0
            [videophotostatus] => 0
            [adminid] => 1
            [groupid] => 1
            [groupexpiry] => 0
            [extgroupids] => 
            [regdate] => 1431400690
            [credits] => 152
            [notifysound] => 0
            [timeoffset] => 
            [newpm] => 0
            [newprompt] => 0
            [accessmasks] => 0
            [allowadmincp] => 1
            [onlyacceptfriendpm] => 0
            [conisbind] => 0
            [freeze] => 0
        )
    [status] => 1
)
通过返回值的信息就可以轻松判断登录是否成功。
 
 1.4 设置用户登录状态,设置登录状态后,在状态有效期内访问其他业务均无需再次登录。
 
 setloginstatus 函数的第一个参数为 userlogin 函数返回数组中的 member 字段的值,第二个参数是状态的有效期的秒数,例如 2592000 表示30天。复制代码if ($uid > 0) {
        setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);
} else {
        echo ("Login Failed!"); exit;
}
 2、登出
 登出相对简单,使用函数 clearcookies() 即可!
 
 | 
 |