CoderMrWu

生活诚可期,爱情价更高!

使用thinkphp实现用户登录功能

实现思路:

1、POST提交登录数据(用户名和密码)

2、获取POST请求的数据,根据用户名来验证账号是否存在。

3、校对状态码和校对密码

4、更新数据库

5、将从数据库获取的用户信息保存到Session中

6、跳转到首页,完成登录。

实现代码:

1、登录表单代码

    <form class="form form-horizontal" action="{:url('login/check')}" method="post">

      <div class="row cl">

        <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60d;</i></label>

        <div class="formControls col-xs-8">

          <input id="" name="username" type="text" placeholder="用户名" AUTOCOMPLETE="OFF" class="input-text size-L">

        </div>

      </div>

      <div class="row cl">

        <label class="form-label col-xs-3"><i class="Hui-iconfont">&#xe60e;</i></label>

        <div class="formControls col-xs-8">

          <input id="" name="password" type="password" placeholder="密码" AUTOCOMPLETE="OFF" class="input-text size-L">

        </div>

      </div>

      <div class="row cl">

        <div class="formControls col-xs-8 col-xs-offset-3">

          <input class="input-text size-L" type="text" placeholder="验证码"  name="code" value="" style="width:150px;">

         <img src="/captcha" alt="点击更新验证码" onclick="reloadcode(this)"/>

          </div>

      </div>

      <div class="row cl">

        <div class="formControls col-xs-8 col-xs-offset-3">

        </div>

      </div>

      <div class="row cl">

        <div class="formControls col-xs-8 col-xs-offset-3">

          <input name="" type="submit" class="btn btn-success radius size-L" value="&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;">

          <input name="" type="reset" class="btn btn-default radius size-L" value="&nbsp;取&nbsp;&nbsp;&nbsp;&nbsp;消&nbsp;">

        </div>

      </div>

    </form>

2、获取登录信息

通过用户名查询相关数据、验证状态码、验证密码是否正确,更新数据库信息、保存用户数据到Session中。

    public function check(){

        // 判断是否是POST请求
        if($this->request->isPost()){

            //1、获取post的请求数据
            $data = \input('post.');

            // var_dump($data);

            // 验证码验证
            /*
            if(!captcha_check($data['code'])){
                $this->error('验证码不正确!');
            }
            */

            try {
                // 2、通过username来查询用户数据
                $user = model('AdminUser')->get(['username'=>$data['username']]);
            } catch (\Exception $th) {
               $this->error($e->getMessage());
            }

            //2、校对状态码,判断用户是否存在,不存在,则返回登录页面
            if(!$user || $user->status != config('code.status_normal')){
                $this->error('用户不存在');
            }

            //3、校验密码,判断密码是否正确,不正确则返回登录页面
            if($user->password != \md5($data['password'].'_#sing_ty')){
                $this->error('密码错误');
            }

            //4、更新数据库: 登录时间 登录IP等数据
            这个部分主要是跟数据表有关系,有些账号需要更新登录时间、登录ip等字段

            //5、将数据保存到Session,以后用户的是否登录,就看session中是否有用户数据
            \session(config('admin.session_user'),$user,config('admin.session_user_scope'));

            //6、登录成功就跳转到首页
            $this->success('登录成功!','index/index');

        }else{
            $this->error('请求不合法');
        }
    }

3、实现退出登录功能

退出登录功能,实质就是清除浏览器的Session中的用户数据。

    public function logout(){
        // 清除Session中的用户数据
        \session(null,\config('admin.session_user_scope'));
        // 跳转到登录页
        $this->redirect('login/index');
    }

 

以上就是用户登录的基本步骤,在实际的开发中,可能用户字段会比现在的更复杂,正这个例子中没有实现验证码功能,实际开发中肯定会有验证码功能,也肯定会有在登录成功之后更新数据表信息的功能。

点赞