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 相关文章推荐
PHP的面向对象编程
Oct 09 PHP
一个程序下载的管理程序(四)
Oct 09 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php使用curl获取https请求的方法
Feb 11 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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中的数组处理函数实例总结
2016/01/09 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python Gitlab Api 使用方法
2019/08/28 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
金融专业个人的自我评价
2013/10/18 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书