|
在围绕 Discuz 进行二次开发是,很多场景都要求用户权限,即登录后才允许进行相关操作,操作结束后还需要登出系统以确保安全性。
以下分别介绍登录和登出的具体操作方法。
1、登录
登录流程:
a,前端页面通过表单将用户名、密码提交到后台对应模块,然后调用函数 userlogin 处理用户提交的用户名和密码,返回值是一个数组;
b,如果用户名密码验证成功,则数组中保存了用户的相关信息,可以通过 uid 值来判断是否登录成功,uid > 0 则表示登录成功,uid 值即用户在 UCenter 中的 ID 号。
c,如果用户名密码验证失败,则 uid 值小于0,且不同的负值表示不同的错误类型。
d,接着还需要 setloginstatus 函数设置用户登录状态,最后根据需要跳转到指定的页面。
1.1 登录代码实例- require libfile('function/member');
- $result = userlogin($_GET['username'], $_GET['password'], '', '', '', $_G['clientip']);
- $uid = $result['ucresult']['uid'];
复制代码
1.2 userlogin 参数
- function userlogin($username, $password, $questionid, $answer, $loginfield = 'username', $ip = '')
复制代码
$username,用户名/邮箱/UID
$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 设置用户登录状态,设置登录状态后,在状态有效期内访问其他业务均无需再次登录。
- if ($uid > 0) {
- setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);
- } else {
- echo ("Login Failed!"); exit;
- }
复制代码
setloginstatus 函数的第一个参数为 userlogin 函数返回数组中的 member 字段的值,第二个参数是状态的有效期的秒数,例如 2592000 表示30天。
补充:需要注意的是,在使用 setloginstatus 后,应该使用 dheader() 立即刷新当前页面,已使登录状态生效!
2、登出
登出相对简单,使用函数 clearcookies() 即可!
|
|