TP5.1用户登录成功处理存储用户信息Session优化

author:咔咔

wechat:fangkangfk

 

源码:https://download.csdn.net/download/fangkang7/10749294

TP5.1用户登录成功处理存储用户信息Session优化_第1张图片

 

在用户登录成功后,我们会将用户的信息存储到session中

 

步骤:

我们在用户登录后会储存很多的用户信息,也会设置很多的session的key,后期项目不方便维护和管理

这就需要创建一个工具类来管理我们的SESSION储存用户信息(app\util\SC),将我们需要处理的所有的存储操作放置里边

在下来就是创建门面类(facade\SC)代理这个工具类,在这一步我们需要创建config\facade。放置facade的配置

下来就需要创建钩子初始化

 

源码:

TP5.1用户登录成功处理存储用户信息Session优化_第2张图片

loginWay as $k=>$v){
            $user = User::where([$v=>$username])->find();
            // 如果存在就有这个用户,跳出
            if($user){
                break;
            }
        }

        if(!$user){
            //用户名不存在
           return ERROR_NO_USER;
        }
        if($user->user_status != 1){
            // 用户是否被封
            return ERROR_USER_START;
        }
        if(!password_verify($password,$user->user_password)){
            // 密码错误,登录失败
            return ERROR_PASSWORD;
        }

        // 用户登录成功后操作存储用户信息
        $data = [
            'uid' => $user->uid,
            'user_name'=>$user->user_name,
            'is_system'=>$user->is_system,
            'nick_name'=>$user_name,
            'role_id'=>$user->role_id
        ];
        
        Session::set('USER_INFO_SESSION',$data);

        //登录成功
        return SUCCESS;
    }
}

很明显为了保障方法的单一原则,我们需要对用户登录后的存储信心数据进行分离

我们就可以创建一个方法来专门处理存储用户信息的操作

TP5.1用户登录成功处理存储用户信息Session优化_第3张图片

源码:

loginWay as $k=>$v){
            $user = User::where([$v=>$username])->find();
            // 如果存在就有这个用户,跳出
            if($user){
                break;
            }
        }

        if(!$user){
            //用户名不存在
           return ERROR_NO_USER;
        }
        if($user->user_status != 1){
            // 用户是否被封
            return ERROR_USER_START;
        }
        if(!password_verify($password,$user->user_password)){
            // 密码错误,登录失败
            return ERROR_PASSWORD;
        }

        // 用户登录后的操作
        $this->initLogin($user);

        //登录成功
        return SUCCESS;
    }


    // 登入初始化
    public function initLogin()
    {

        // 用户登录成功后操作存储用户信息
        $data = [
            'uid' => $user->uid,
            'user_name'=>$user->user_name,
            'is_system'=>$user->is_system,
            'nick_name'=>$user_name,
            'role_id'=>$user->role_id
        ];
        // 存储用户信息
        Session::set('USER_INFO_SESSION',$data);
        // 存储用户角色
        Session::set('USER_ROLE_SESSION',$user->role_id);
        // 存储是否是系统后台的用户
        Session::set('USER_IS_SYSTEM',$user->is_system);

    }

}

我们就会发现需要存储的信息是比较多的,这里只是做了存储用户信息,用户退出后我们还是需要在写一遍,这是不合适的

所以我们就创建一个工具类SC

TP5.1用户登录成功处理存储用户信息Session优化_第4张图片

源码: 

创建门面类代理工具类SC

 

配置门面类

TP5.1用户登录成功处理存储用户信息Session优化_第5张图片

创建门面类SC

TP5.1用户登录成功处理存储用户信息Session优化_第6张图片

 创建钩子

TP5.1用户登录成功处理存储用户信息Session优化_第7张图片

源码:

初始化钩子

TP5.1用户登录成功处理存储用户信息Session优化_第8张图片

下来就可以直接在service/UserService中使用了

TP5.1用户登录成功处理存储用户信息Session优化_第9张图片

这样就解决了登入后信息储存的方便,还有一个方法就是用户退出后清除session的存储信息,也只需要一个方法即可,在项目中给我们提供了很大的方便性 

你可能感兴趣的:(thinkPHP)