php实现用户登录与注销的代码示例
来源:不言
发布时间:2019-03-23 15:15:08
阅读量:1077
本篇文章给大家带来的内容是关于php实现用户登录与注销的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
之前虽然写过登录的功能,但是注销还没有认真的看过。特此记录
当点击登录时,把用户账号信息以变量的形式存在定义的作用域(session)。session代表一次会话,只要你不关闭当前浏览器他的值就会存在,默认20分钟左右。
1 2 3 4 5 6 | session(‘BisAccount’, $ret , ‘bis’);
session( null,‘bis’);
session(‘BisAccount’, ‘’, ‘bis’);
|
Login
// 如果是post请求,即从登录页面过来的数据 则判断用户名和密码是否正确
账号密码与随机生成的数字拼接,使用MD5加密
// 如果不是post,判断session中是否有登录信息
有 跳转到登录后的页面
没有 跳转到登录页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | class Login extends Controller{
public function index()
{
if (request()->isPost()) {
$data = input( 'post.' );
$ret = model( 'BisAccount' )->get([ 'username' => $data [ 'username' ]]);
if ( empty ( $ret ) || $ret ->status != 1){
$this ->error( '该用户不存在或者未审核通过' );
}
$pass = $data [ 'password' ];
$ran = $ret [ 'code' ];
if (md5( $pass . "" . $ran ) != $ret [ 'password' ]){
$this ->error( '密码错误' );
}
model( 'BisAccount' )->updateById([ 'last_login_time' =>time()], $ret ->id);
session( 'BisAccount' , $ret , 'bis' );
return $this ->success( '登录成功' ,url( 'Index/index' ));
} else {
$account = session( 'BisAccount' , '' , 'bis' );
if (! empty ( $account ) && $account ->id){
return $this ->redirect(url( 'index/index' ));
}
return $this ->fetch();
}
}
public function logout(){
session( null, 'bis' );
$this ->redirect(url( 'login/index' ));
}}
|
登录后的页面
Base
判断session中是否有BisAccount
有,说明登录状态
没有,重定向到登录页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Base extends Controller{
public $account ;
public function _initialize() {
$isLogin = $this ->isLogin();
if (! $isLogin ) {
return $this ->redirect(url( 'login/index' ));
}
}
public function isLogin() {
$user = $this ->getLoginUser();
if ( $user && $user ->id) {
return true;
}
return false;
}
public function getLoginUser() {
if (! $this ->account) {
$this ->account = session( 'BisAccount' , '' , 'bis' );
}
return $this ->account;
}}
|
Index
主页 继承自 Base 。如果账号注销后,再次访问index/index,则会走Base中_initialize初始化方法,
判断bis作用域中是否有BisAccount从而跳转到登录页面,而不会访问到登录后的页面。
登录后,访问index/index 与 login/index 返回相同的页面。
1 2 3 4 5 6 | class Index extends Base{
public function index()
{
return $this ->fetch( '' );
}
}
|
tip: 如果存入的Session名称为A,取Session时也要取A
1 2 3 4 | session(‘BisAccount’, $ret , ‘bis’);
session(‘BisAccount’, ‘’, ‘bis’);
|
都是BisAccount