| 
 | 
 
在围绕 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天。 
 
2、登出 
登出相对简单,使用函数 clearcookies() 即可! 
 |   
 
 
 
 |