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 19 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP自动生成表单代码分享
Jun 19 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
js实现电灯开关效果
2021/01/19 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python3中函数参数的四种简单用法
2018/07/09 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
经典c++面试题五
2014/12/17 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
行政文员岗位职责
2015/02/04 职场文书
订货会主持词
2015/07/01 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
Golang ort 中的sortInts 方法
2022/04/24 Golang