tp5 Session 使用 实现用户信息验证

本文介绍了基于ThinkPHP框架的用户登录系统实现,包括基类控制器`Base`中定义的统一返回数据格式方法`showResCode`,以及用户登录类`Pubuser`的登录、自动新增用户、登出和密码修改功能。`isLogin`方法用于检查用户是否已登录,通过`Session`管理用户状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基类实现base 

<?php

namespace app\index\controller;

use think\Controller;
use think\Request;
use think\facade\Session;

class Base extends Controller
{
    //api 统一返回数据格式
    static public function showResCode($msg='', $data=[], $code=200){

        $res = [
            'msg'=>$msg ? $msg : '未定义消息',
            'data'=>$data ? $data : []
        ];
        return json([$res,$code]);
    }

    static public function showResCodeWithOutData($msg='',$code=200){
        return self::showResCode($msg,[],$code);
    }


    protected function isLogin()
    {
        if(is_null(Session::get("username"))){
            $this->error("请勿非法进入");
        }
    }
}

用户登录类实现:

<?php

namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Db;
use think\Exception;
use app\index\controller\Base;
use think\facade\Session;

class Pubuser extends Base
{
    //登陆接口
    public function login()
    {
        $param = request()->param();
        $username = $param['username'];
        $password = $param['password'];

        $this->pubuserAdd($username,$password);
        
        $sql = "select 1 from dbo.pubuser where status<>65536 and  (username ='".$username."' or usercode ='".$username."') and password='".$password."' ";
        
        $res = Db::query($sql);

        $flag = $res ? true:false;

        if($flag==true)
        {

           Session::set('username',$username); 
           return self::showResCode('操作成功',["msg"=>"登陆成功".Session::get("username"),"flag"=>true]);
        }
        else
        {
            return self::showResCode('操作成功',["msg"=>"登陆失败,密码或账号不正确","flag"=>false]);
        }
        
    }

   // 自动新增用户
    private function pubuserAdd($username, $password){
        $sql = "select 1 from dbo.pubuser where status<>65536 and (username ='".$username."' or usercode ='".$username."')";
        $res = Db::query($sql);
        $flag = $res ? true:false;
        if($flag === false)
        {

            $data = ['userName' => $username, 'userCode' => $username,'password'=>$password,'status'=>0]; //字段名称区分大小写

            Db::startTrans();
            try{
                Db::table('pubuser')->insert($data);
                Db::commit();
            }catch(Exception $e){
                Db::rockback();
            }
        }


    }

    // 登陆退出
    public function logout()
    {
        $username = Session::get("username");
        session(null);
        return self::showResCode('操作成功',["res"=>$username."退出成功","flag"=>true]);
    }

    // 密码修改
    public function updatePassword()
    {
        $this->isLogin();
        $param = request()->param();
        $username = $param['username'];
        $password = $param['password'];

        
        Db::startTrans();
        try {
            Db::table('pubuser')->where('username', $username)->update(['password' => $password]);  
            Db::commit();
            return self::showResCode('操作成功',['res'=>"修改成功","flag"=>true]);
        } catch (Exception $e) {
            Db::rockback();
            return self::showResCode('操作成功',['res'=>"修改失败","flag"=>false]);
        }
    }
   

}

引用:use think\facade\Session;

  1. 设置Session:Session::set('username',$username); 
  2. 获取Session:Session::get('username'); 

步骤:

  1. 基类实现isLogin 判断用户是否在线登录
  2. 用户登录类实现Session.set
  3. 其他类在访问之前先调用基类方法isLogin

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值