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初学者最感迷茫的问题小结
Mar 27 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
php获取mysql字段名称和其它信息的例子
Apr 14 PHP
php计算年龄精准到年月日
Nov 17 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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与SQL注入攻击[一]
2007/04/17 PHP
Phpbean路由转发的php代码
2008/01/10 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
类似框架的js代码
2006/11/09 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
python如何实现内容写在图片上
2018/03/23 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
求职简历推荐信范文
2013/12/02 职场文书
关于安全的演讲稿
2014/05/09 职场文书
初中生物教学随笔
2015/08/15 职场文书
创业计划书之花店
2019/09/20 职场文书
Python闭包的定义和使用方法
2022/04/11 Python