[thinkPHP5项目实战_23]管理员登录信息展示、登出和登录状态检测

版权声明:在那最初的相遇中,我们都曾经为彼此心动过... https://blog.csdn.net/weixin_36185028/article/details/78389441
1.管理员登录信息展示和修改

登录成功后需要在头部展示登录的管理员的名称信息,并且点击修改能跳转到修改页面进行操作

登录成功后,需要将用户的信息写入服务器的session中,从session中获取用户名和id

thinkPHP5的session使用方法:https://www.kancloud.cn/manual/thinkphp5/126166

在登录的model中成功后写入session:

<?php 
namespace app\admin\model;

use think\Model;

class Login extends Model
{
	//登录数据处理函数
	//获取控制器传过来的登录名和密码,根据登录名在数据库中获取密码
	//若密码一样则给控制器返回1,若密码存在但是不一样返回2,或密码不存在,返回3
	public function login($username,$password){
		$admin = \think\DB::name('admin')->where('username','=',$username)->find();
		if($admin){
			if($admin['password'] === md5($password)){
				//将登录id和名称存入session
                \think\Session::set('id',$admin['id']);
                \think\Session::set('username',$admin['username']);
				return 1;
			}else{
				return 2;
			}
		}else{
			return 3;
		}
	}
}

?>

在头部获取session中对应的值展示出来;

点击修改跳转到修改的控制器并将存在session中用户存的值传到对应控制器中

        <div id="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">管理员<?php echo session('username');?></a></li>
                <li><a href="{:url('Admin/edit',array('id'=>session('id')))}">修改密码</a></li>
                <li><a href="{:url('Login/logout')}">退出</a></li>
            </ul>
        </div>

2.登出

点击登录,则清空用户的session信息,并跳转到登录页面

在登录控制器中添加登出操作方法:

    public function logout(){
        session(null);//退出清空session
        return $this->success('退出成功',url('login'));//跳转到登录页面
    }
}

3.登录状态监测

用户打开等登出外的任何页面都需要对用户是否登录进行监测,因此每个页面对应的控制器操作方法执行之前都要执行一次登录检测

thinkPHP5提供了控制器初始化方法_initialize,在该控制器的方法调用之前首先执行https://www.kancloud.cn/manual/thinkphp5/118049

新建Basic控制器

<?php
namespace app\admin\controller;
use think\Controller;
class Basic extends Controller
{
    //定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。
    public function _initialize()
    {
        if(!session('id')){
            return $this->error('请先登录系统',url('Login/login'));
        }
    }


}
然后将后台模块中出登录控制器之外的所有控制器都继承该控制器的操作方法

比如Admin控制器继承

namespace app\admin\controller;
class Admin extends Basic

继承了Basic控制器再的其他控制器无需引入think\Controller



展开阅读全文

没有更多推荐了,返回首页