thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例


Posted in PHP onOctober 10, 2019

本文实例讲述了thinkphp 5框架实现登陆,登出及session登陆状态检测功能。分享给大家供大家参考,具体如下:

1,访问http://localhost/tp5/admin.php时,判断有没有登陆:

想法:写一个父类,继承controller,然后定义一个初始化方法,在控制器调用时就判断是否登陆

<?php
namespace app\Admin\controller;
use think\Controller;
use think\Session;
class Basic extends Controller
{
  //如果你的控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。
  public function _initialize()
  {
    //判断有无admin_username这个session,如果没有,跳转到登陆界面
    if(!session('admin_username')){
      return $this->error('您没有登陆',url('Login/login'));
    }
  }
}

登陆界面:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <h1>登陆</h1>
  <div>
    <form class="m-t" role="form" action="{url('Login/login')}" method="post">
      <div class="input-field">
        <input id="admin_username" type="text" name="admin_username" class=" validate" placeholder="请输入用户名" required>
        <label for="admin_username">用户名</label>
      </div>
      <div class="input-field">
        <input id="admin_password" type="password" name="admin_password" placeholder="请输入密码" class="validate" required>
        <label for="admin_password">密码</label>
      </div>
      <button type="submit" class="waves-effect red lighten-1 waves-light btn full-width " style="margin-top:10px; height:40px;">登 录</button>
    </form>
  </div>
</body>
</html>

thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例

登陆控制器:

<?php
namespace app\Admin\controller;
use think\Controller;
use think\Session;
use think\Request;
use think\Db;
class Login extends Controller{
  public function login(){
//判断是否是post方法发送的数据:如果是则开始登陆
    if (Request::instance()->isPost()){
      $admin_username = input('post.admin_username');//接收前台用户名
      $admin_password = input('post.admin_password');//接收前台密码
      if(empty($admin_username) || empty($admin_password)){
        $this->error("用户名或者密码不能为空!");
      }
      //从数据库读取数据
      $admin_info = DB::name('admin')
      ->where('admin_username',$admin_username)
      ->find();
      if(empty($admin_info)){
        $this->error('用户不存在,请重新登陆',url('Login/login'));
      }else{
        if(md5($admin_password)!=$admin_info['admin_password']){
          $this->error('密码不正确,请重新登陆',url('Login/login'));
        }else{
          Session::set('admin_username',$admin_username);
          $this->success("登录成功!",url('Index/index'));
        }
      }
    }else{//如果不是post,则返回登陆界面
      return view('login');
    }
  }
  public function logout(){
    session(null);//退出清空session
    return $this->success('退出成功',url('Login/login'));//跳转到登录页面
  }
}

thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例

如果失败,回到登陆页面;如果登陆成功,跳转到后台首页:

<?php
namespace app\Admin\controller;
use think\Controller;
use think\Session;
use think\View;
//后台首页继承自登陆判断页面,每次加载都会先执行判断页面的代码
class Index extends Basic
{
  public function index()
  {
    $view = new View();
    $data = session('admin_username');
    $view->assign('data',$data);
    //return view('index');
    return $view->fetch('index');
  }
}

后台首页面:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <!-- <h1>hello,{$Think.session.admin_username}</h1> -->
  <h1>hello,{$data}</h1>
  <a href="{:url('Login/logout')}" rel="external nofollow" >退出登陆</a>
</body>
</html>

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
input file获得文件根目录简单实现
Apr 26 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
Oct 22 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 #PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 #PHP
在laravel中使用with实现动态添加where条件
Oct 10 #PHP
Laravel关系模型指定条件查询方法
Oct 10 #PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 #PHP
基于laravel where的高级使用方法
Oct 10 #PHP
laravel 实现设置时区的简单方法
Oct 10 #PHP
You might like
PHP实现递归的三种方法
2020/07/04 PHP
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
js opener的使用详解
2014/01/11 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
微信小程序的线程架构【推荐】
2019/05/14 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python读取word文本操作详解
2018/01/22 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Django celery异步任务实现代码示例
2020/11/26 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
长青弘远的面试题
2012/06/09 面试题
中学教师实习自我鉴定
2013/09/28 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
应用心理学专业求职信
2014/08/04 职场文书
学习考察心得体会
2014/09/04 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技