【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:PHP程序开发


请添加图片描述

请添加图片描述

文章目录

    • 前言
    • 🎶一、登录功能模块
    • 🎶二、退出登录功能模块
        • 结束语🥇


前言

  在 Web 应用程序中,登录和退出功能是基本而重要的功能之一。通过登录功能,用户可以安全地访问其个人信息和应用程序功能,而退出功能则允许用户安全地退出登录状态。ThinkPHP 是一款快速、简单的 PHP 开发框架,提供了丰富的功能和便捷的开发方式,适用于各种规模的 Web 应用程序开发。本教程将指导您如何使用 ThinkPHP 框架实现登录和退出功能,以提高您的 Web 应用程序的安全性和用户体验。

前提条件:

  已经安装了 ThinkPHP 框架,并配置好了开发环境。
  已经建立了数据库,并且拥有用于存储用户信息的表。
步骤概述:

  创建登录页面: 使用 HTML 和 ThinkPHP 的模板引擎创建登录页面,包括用户名和密码输入框以及登录按钮。

  处理登录请求: 在 ThinkPHP 控制器中创建处理登录请求的方法,接收用户提交的用户名和密码,验证其准确性,并创建登录会话。

  实现登录验证: 在数据库中验证用户输入的用户名和密码是否匹配,如果匹配成功,则创建登录会话并将用户重定向到应用程序的主页。

  创建退出功能: 在 ThinkPHP 控制器中创建处理退出请求的方法,清除登录会话并将用户重定向到登录页面。

  保护页面访问: 在需要登录才能访问的页面中添加登录验证逻辑,确保未登录用户无法访问敏感信息。


🎶一、登录功能模块


  为实现登录功能提供了强大的支持。本教程将带领您逐步学习如何在 ThinkPHP 中开发完整的登录功能模块,包括用户身份验证、会话管理和错误处理等方面。
步骤概述:

  创建数据库表: 设计并创建一个用户表,用于存储用户的登录信息,包括用户名、密码等字段。

  创建登录页面: 使用 HTML 和 ThinkPHP 模板引擎创建登录页面,包括用户名和密码输入框以及登录按钮。

  处理登录请求: 在 ThinkPHP 控制器中创建处理登录请求的方法,接收用户提交的用户名和密码,并进行验证。

  实现用户验证: 在数据库中验证用户输入的用户名和密码是否匹配,若匹配成功,则创建登录会话。

  会话管理: 使用 ThinkPHP 提供的 Session 功能来管理用户的登录状态,确保用户在一定时间内保持登录状态。

  错误处理: 在登录过程中,处理用户输入错误、数据库查询失败等可能出现的错误,并给出友好的提示信息。

  安全性考虑: 实现一些安全性考虑,如密码加密存储、防止 SQL 注入等,保障用户信息的安全。

在这里插入图片描述
Login.html页面代码:

  <!DOCTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
      <meta name="renderer" content="webkit|ie-comp|ie-stand">
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <meta http-equiv="Cache-Control" content="no-siteapp" />
      <meta name="keywords" content="">
      <meta name="description" content="">
      <title>首页</title>

      <link rel="stylesheet" href="__STATIC__/common/layui/css/layui.css">
      <link rel="stylesheet" href="__STATIC__/common/css/sccl.css">


    </head>

    <body class="login-bg">
      <div class="login-box">
          <header>
              <h1>新闻管理系统后台</h1>
          </header>
          <div class="login-main">
              <form action="" class="layui-form" method="post" id="login_form">
                  <input name="__RequestVerificationToken" type="hidden" value="">                
                  <div class="layui-form-item">
                      <label class="login-icon">
                          <i class="layui-icon"></i>
                      </label>
                      <input type="text" name="userName" lay-verify="userName" autocomplete="off" placeholder="这里输入登录名" class="layui-input">
                  </div>
                  <div class="layui-form-item">
                      <label class="login-icon">
                          <i class="layui-icon"></i>
                      </label>
                      <input type="password" name="password" lay-verify="password" autocomplete="off" placeholder="这里输入密码" class="layui-input">
                  </div>
                  <div class="layui-form-item">
                      <div class="pull-left login-remember">
                          <label>记住帐号?</label>

                          <input type="checkbox" name="rememberMe" value="true" lay-skin="switch" title="记住帐号"><div class="layui-unselect layui-form-switch"><i></i></div>
                      </div>
                      <div class="pull-right">
                          <button class="layui-btn layui-btn-primary" lay-submit="" lay-filter="login"  >
                              <i class="layui-icon"></i> 登录
                          </button>
                      </div>
                      <div class="clear"></div>
                  </div>
              </form>        
          </div>
          <footer>
              <p>湖南应用技术学院</p>
          </footer>
      </div>

      <script src="__STATIC__/common/layui/layui.js"></script>
      <script>
          layui.use(['layer', 'form'], function () {
              var layer = layui.layer,
                  $ = layui.jquery,
                  form = layui.form();

              form.verify({
                  userName: function (value) {
                      if (value === '')
                          return '请输入用户名';
                  },
                  password: function (value) {
                      if (value === '')
                          return '请输入密码';
                  }
              });

              form.on('submit(login)', function (data) {
                      $.post('isLogin',data.field , function (res) {
                      if (!res.success) {
                          layer.msg(res.message,{icon:2});
                      }else
                      {
                          layer.msg(res.message,{icon:1},function(index){
                              layer.close(index);
                              location.href='../index/index';
                          });
                      }
                  }, 'json');

                  return false;
              });
          });

      </script>
    </body>
  </html>

Login.php逻辑代码:

<?
namespace app\admin\controller;
use think\View;
use app\admin\model\Users;
use think\Session;

class Login 
{
    public function login()
	{
		//访问界面
         $view = new View();
         return $view->fetch('login');

    }
	public function isLogin()
	{
		$obj=array("success"=>false,"message"=>"登录失败,请确认账号密码");
		
		// 接受login.html的账号信息(提交的表单),
		$userName=trim($_POST['userName']);
		$password=trim($_POST['password']);
		$md5pwd=md5($password);
		
		//连接数据库,判定数据库中是否有该用户,M模型层
		$user = new Users();
		// 查询单个数据
		$data=$user->where('tel', $userName)->where('pwd', $md5pwd)->find();
		$view = new View();
		$isLogin=true;
		if($data!=NULL){
		
			Session::set("id",$data['Id']);
			Session::set("name",$data['name']);
			Session::set("email",$data['email']);
			Session::set("tel",$data['tel']);
			Session::set("img",$data['img']);
			
			$obj=array("success"=>true,"message"=>"登录成功");
		}
		echo json_encode($obj);
	}
	}
?>

🎶二、退出登录功能模块


  退出功能在 Web 应用程序中同样非常重要,它允许用户安全地结束当前会话并退出登录状态。ThinkPHP 提供了简单而有效的方式来实现退出功能,本教程将指导您如何在 ThinkPHP 中开发完整的退出功能模块,以提高您的应用程序的安全性和用户体验。
步骤概述:

  创建退出处理方法: 在 ThinkPHP 控制器中创建处理退出请求的方法,用于清除当前用户的登录会话。

  清除会话信息: 在退出处理方法中,使用 ThinkPHP 提供的 Session 功能来清除用户的登录会话信息,确保用户安全退出登录状态。

  重定向到登录页面: 在退出处理方法中,将用户重定向到登录页面,以便用户重新登录或者浏览其他内容。

  安全性考虑: 在退出过程中,确保用户的会话信息被安全清除,避免可能存在的安全隐患。

在这里插入图片描述
index.html页面代码:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
	<meta name="renderer" content="webkit|ie-comp|ie-stand">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta http-equiv="Cache-Control" content="no-siteapp" />
	<meta name="keywords" content="scclui框架">
	<meta name="description" content="scclui为轻量级的网站后台管理系统模版。">
    <title>首页</title>
	
	<link rel="stylesheet" href="__STATIC__/common/css/sccl.css">
	<link rel="stylesheet" type="text/css" href="__STATIC__/common/skin/qingxin/skin.css" id="layout-skin"/>
    
  </head>
  
  <body>
	<div class="layout-admin">
		<header class="layout-header">
			<span class="header-logo">系统框架</span> 
			<a class="header-menu-btn" href="javascript:;"><i class="icon-font">&#xe600;</i></a>
			<ul class="header-bar">
				<li class="header-bar-role"><a href="javascript:;">超级管理员</a></li>
				<li class="header-bar-nav">
					<a href="javascript:;">{$Think.session.name}<i class="icon-font" style="margin-left:5px;">&#xe60c;</i></a>
					<ul class="header-dropdown-menu">
						<li><a href="javascript:;">个人信息</a></li>
						<li><a href="javascript:;">切换账户</a></li>
						<li><a href="../login/loginOut">退出</a></li>
					</ul>
				</li>
				<li class="header-bar-nav"> 
					<a href="javascript:;" title="换肤"><i class="icon-font">&#xe608;</i></a>
					<ul class="header-dropdown-menu right dropdown-skin">
						<li><a href="javascript:;" data-val="qingxin" title="清新">清新</a></li>
						<li><a href="javascript:;" data-val="blue" title="蓝色">蓝色</a></li>
						<li><a href="javascript:;" data-val="molv" title="墨绿">墨绿</a></li>
						
					</ul>
				</li>
			</ul>
		</header>
		<aside class="layout-side">
			<ul class="side-menu">
			  
			</ul>
		</aside>
		
		<div class="layout-side-arrow"><div class="layout-side-arrow-icon"><i class="icon-font">&#xe60d;</i></div></div>
		
		<section class="layout-main">
			<div class="layout-main-tab">
				<button class="tab-btn btn-left"><i class="icon-font">&#xe60e;</i></button>
                <nav class="tab-nav">
                    <div class="tab-nav-content">
                        <a href="javascript:;" class="content-tab active" data-id="home.html">首页</a>
                    </div>
                </nav>
                <button class="tab-btn btn-right"><i class="icon-font">&#xe60f;</i></button>
			</div>
			<div class="layout-main-body">
				<iframe class="body-iframe" name="iframe0" width="100%" height="99%" src="home.html" frameborder="0" data-id="home.html" seamless></iframe>
			</div>
		</section>
		<div class="layout-footer">@2016 0.1 www.mycodes.net</div>
	</div>
	<script type="text/javascript" src="__STATIC__/common/lib/jquery-1.9.0.min.js"></script>
	
	<script type="text/javascript" src="__STATIC__/common/js/sccl.js"></script>
	<script type="text/javascript" src="__STATIC__/common/js/sccl-util.js"></script>
  </body>
</html>


login.php页面的逻辑代码:

	public function loginOut(){
		//清除session
		Session::clear();
		//通过视图的方法登录到登录页面
		$view = new View();
		return $view->fetch('login');
	}
结束语🥇

以上就是PHP程序设计
持续更新PHP程序设计教程,欢迎大家订阅系列专栏🔥PHP程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/677561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对新手友好的最简单方便的本地项目关联git远程仓库教程

对新手友好的最简单方便的本地项目关联git远程仓库教程 前置条件1.本地项目2.gitee上创建同名项目 关联操作1.在本地进行clone远程仓库操作2.把本地项目下的目录和文件都复制到这个克隆自git的项目文件夹里面3.查看文件状态和提交文件 在我们创建项目时&#xff0c;一般都是在本…

Java IO流的基本概念和使用,包括文件读写、序列化等

Java 输入输出&#xff08;IO&#xff09;系统提供了一套丰富的类和接口&#xff0c;用于处理文件读写、网络通信、数据序列化等各种数据操作。 IO 操作在任何编程语言中都扮演着重要角色&#xff0c;而 Java 的 IO 系统以其强大的灵活性和扩展性&#xff0c;成为开发者进行数…

【全开源】Fastflow工作流系统(FastAdmin+ThinkPHP)

&#x1f680;Fastflow工作流系统&#xff1a;高效协作&#xff0c;流程无忧​ 一款基于FastAdminThinkPHP开发的可视化工作流程审批插件&#xff0c;帮助用户基于企业业务模式和管理模式自行定义所需的各种流程应用&#xff0c;快速构建企业自身的流程管控体系&#xff0c;快…

短剧cps系统搭建开发,热门短剧推广分销系统。短剧分销是怎么操作的?

目录 前言&#xff1a; 二、短剧是怎么推广分销的&#xff1f; 二、 短剧分销系统有什么功能&#xff1f; 三、怎么搭建&#xff1f; 总结&#xff1a; 前言&#xff1a; 短剧分销项目目前的现状是多元化且充满活力的。随着短剧市场的快速发展和观众接受度的提高&#xff0…

浏览器打不开网页是什么原因?这里有详细解答!

在日常使用电脑的过程中&#xff0c;我们经常需要通过浏览器访问各种网站。然而&#xff0c;有时会遇到浏览器无法打开网页的情况&#xff0c;这可能导致工作中断或者无法获取所需的信息。那么浏览器打不开网页是什么原因呢&#xff1f;其实浏览器无法打开网页的原因可能有很多…

stm32-DMA转运数据

在配置前要记得先定义一下DMA转运的源端数组和目标数组两个数组哦。 接下来我们就开始准备配置吧 配置 初始化 1.RCC开启时钟&#xff08;开启DMA的时钟&#xff09; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) 作用&#xff1a;开启时…

JUC 笔记 8

1. Semaphore 信号量 基本使用 [ˈsɛməˌfɔr] 信号量&#xff0c;用来限制能同时访问共享资源的线程上限。 public static void main(String[] args) {// 1. 创建 semaphore 对象Semaphore semaphore new Semaphore(3);// 2. 10个线程同时运行for (int i 0; i < 10; …

一款史上最强的智能优化算法软件,MATLAB APP Designer开发

很久没有整理干货了&#xff0c;原因是最近一直在精心打磨一款智能优化算法APP&#xff0c;前前后后改了很多次&#xff0c;今天终于完工了&#xff01;接下来跟我一起来看看这款软件吧&#xff01; 目录 引言 01 单个算法测试介绍 02多种算法对比介绍 03软件安装及一些限…

深入解析ETL与ELT架构:数据集成技术的演进与发展

摘要&#xff1a;随着大数据时代的到来&#xff0c;数据集成成为企业信息化建设的重要环节。本文将深入探讨ETL与ELT两种架构&#xff0c;分析它们在数据处理、性能、可扩展性等方面的差异&#xff0c;为企业数据集成提供技术指导。 一、引言 在大数据时代&#xff0c;企业需要…

slf4j等多个jar包冲突绑定的排查方法使用IDEA的maven help解决

1.安装 2.使用maven help解决&#xff0c;找到对应包存在的冲突 使用exclude直接解决即可

HTML跨年烟花

目录 写在前面 关于小编 HTML简介 程序设计 系列文章 写在后面 写在前面 学会了这个html烟花秀&#xff0c;跨年就不缺文案喽~ 关于小编 平易近人&#xff0c;慈眉善目&#xff0c;爱交朋友&#xff0c;舍己为人&#xff0c;和蔼可亲&#xff0c;能说会道&#xff0c;…

解决 Mac Django 连接Mysql 出现 image not found 问题

最近在使用 Django 框架&#xff0c;因为升级到4.2版本了&#xff0c;对应的本机 Mysql 5.7 就不适用了&#xff0c;于是升级到了 Mysql 8.0&#xff0c;写好代码之后出现如下错误&#xff1a; 仔细分析一下错误的描述&#xff1a; ImportError: dlopen(/Library/Frameworks/P…

【安装笔记-20240529-Windows-Electerm 终端工具】

安装笔记-系列文章目录 安装笔记-20240529-Windows-Electerm 终端工具 文章目录 安装笔记-系列文章目录安装笔记-20240529-Windows-Electerm 终端工具 前言一、软件介绍名称&#xff1a;electerm主页官方介绍功能特性 二、安装步骤测试版本&#xff1a;electerm-1.39.35-win-x…

Pixi绘制地图和小车

之前已经用Pixi绘制出了各种图形以及通过图片绘制精灵&#xff0c;这节用pixi绘制网格地图&#xff0c;并通过图片制作一个Sprite&#xff0c;让这个Sprite在网格地图上运动。首先需要在页面中添加一个div用来后期展示canvas的画布&#xff0c;并将此div实例化为PIXI的Applicat…

Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行的问题

问题&#xff1a;Doris 少数SQL在Datagrip无法执行&#xff0c;而在DorisUI或程序调用可以执行 解决&#xff1a;Datagrip 执行SQL切分异常&#xff0c;设置默认执行语句方式&#xff0c;将分句改为整句执行 但是 支持多SQL批量分开执行更好用

茶树三维基因组-文献精读19

The high-resolution three-dimensional (3D) chromatin map of the tea plant (Camellia sinensis) 茶树&#xff08;Camellia sinensis&#xff09;的高分辨率三维染色质图&#xff0c;还记得茶属的转录组分析嘛~ 比较转录组分析揭示了116种山茶属(Camellia)植物的深层系统…

IDEA下项目发送到Gitee

一、首先在Gitee创建一个仓库&#xff08;什么都不选&#xff0c;这是最简单的方式&#xff0c;否则需要 pull push等一些操作&#xff0c;我嫌麻烦&#xff09; 二、按图点击&#xff08;创建存储区&#xff0c;选择你要上传的项目&#xff09; 三、按图点击后正常文件名会变绿…

ChatTTS 如何安装可视化操作

可视化一键安装下载地址&#xff1a; 百度网盘 Download from GitHub 从 GitHub 下载代码。 git clone https://github.com/2noise/ChatTTS 下载地址 Install Dependencies 在开始之前&#xff0c;请确保已安装必要的软件包。如果您尚未安装它们&#xff0c;可以使用 pip …

51种企业应用架构模式详解

01 什么是企业应用 我的职业生涯专注于企业应用&#xff0c;因此&#xff0c;这里所谈及的模式也都是关于企业应用的。&#xff08;企业应用还有一些其他的说法&#xff0c;如“信息系统”或更早期的“数据处理”。&#xff09;那么&#xff0c;这里的“企业应用”具体指的是什…

芯片验证分享1 —— 开篇及名词解释

大家好&#xff0c;我是谷公子的藏经阁&#xff0c;今天和大家很高兴能和大家分享的是芯片验证中的一些内容&#xff0c;希望对大家的日常工作有所帮助&#xff0c;如果这些内容有帮助到大家的话&#xff0c;那么此次的分享就很值得。另外&#xff0c;对于这个课题&#xff0c;…