【PHP【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出

👨💻个人主页:@开发者-曼亿点
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 曼亿点 原创
👨💻 收录于专栏:PHP程序开发
⭐🅰⭐
— 
文章目录
- ⭐🅰⭐
- ⭐前言⭐
- 🎶一、 会话的定义
- 🎶二、 启动会话
- 🎶三、 会话变量
- 🎶四、删除会话
- 🎶五、首页登录凭证验证
- 🎶六、创建登录首页
- 🎶七、登录验证
- 🎶八、退出登录
- 结束语🥇
⭐前言⭐
如果用户进入需要密码登录凭证的页面,此时就要求用户输入账号和密码进行登录,否则用户无权访问。因此用户登录成功后,需要保留一个登录凭证,以便在各个页面之间进行请求操作。
由于HTTP是一种无状态的请求——响应协议,没有办法记录多个事务请求之间的状态。即访问一个一个页面请求再请求另外一个页面时无法判断两次请求来自同一个用户。通过使用会哈技术,可以将来自同一浏览器的请求联系起来。
🎶一、 会话的定义
PHP中的session会话包括包含以下两个部分:
①会话ID:是加密的随机数,由PHP生成,在会话的生命周期中都会保存在客户端。
②session:保存登录信息,存放在服务器。
当用户登录成功时,PHP启动会话,这样就可以实现全局预定义$ _SESSION中存储登录凭证,同时PHP还会给这个会话生成一个加密的ID发送给浏览器,用于浏览器与此会话的联系,浏览器关闭后这个ID也回被销毁,所以浏览器关闭后,都需要重新登录系统。
当没有关闭浏览器,且用户再次访问其他页面时,回携带此ID,此时服务器会依据ID获得对于的对话,从会话中读取用户登录凭证进行判断。
🎶二、 启动会话
把登录信息存储到PHP session中之前,必须通过sesion_start( )启动会话。sesion_start( )函数必须位于标签之前,且前面不能有任何输出,下面通过编写一个没有启动的会话和启动的会话的案例代码查看两者的区别。
(1)没有启动的会话:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><!-- 让网页的宽度自动适应手机屏幕的宽度 --><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"><title>没有启动会话</title></head><body>没有启动会话</body>
</html>
(2)启动的会话:
定义一个for循环访问数组:
<?php
//启动会话
session_start();
?>
<!DOCTYPE html>
<html><head><meta charset="utf-8"><!-- 让网页的宽度自动适应手机屏幕的宽度 --><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"><title>没有启动会话</title></head><body>没有启动会话</body>
</html>
🎶三、 会话变量
如果会话不存储用户的信息,那么就传递会话ID,服务器并不能判断当前访问的用户是谁。会话启动后,应该将用户的保存在PHP全局预定义的数组$_SESSION中如下例案例代码模拟了页面·访问次数。如果第一次登录(关闭浏览器访问案例代码),保存登录凭证,计数为1;如果浏览器登录案例代码后,刷新当前页面,此处登录凭证还存在,计数为1;
(1)刷新会话计数加1
<?php//启动会话
session_start();
//判断是否存在用户的登录凭证,如果存在count加1
if(isset($_SESSION['login_status'])){//用户登录后,再次访问页面$_SESSION['login_status']['count']++;
}else{//用户第一次登录访问,模拟保存用户信息$_SESSION['login_status']=array('id'=>'1','name'=>'杨浪','tel'=>'143243243','cout'=>'1');
}
?>
<!DOCTYPE html>
<html><head><meta charset="utf-8"><!-- 让网页的宽度自动适应手机屏幕的宽度 --><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"><title>启动会话</title></head><body><?phpecho $_SESSION['login_status']['name'].",欢迎你,"."这是你在此页面留下的笔".$_SESSION['login_status']['count']."次脚印!";?></body>
</html>
案列效果图如下图所示。在不关闭浏览器的情况下,如果服务器发送会话ID,后面的请求将不会发送新的会话ID。

🎶四、删除会话
如果希望删除某些session数据,可以使用unset()或者session_destroy()函数。unset()函数用于释放指定的sesion变量,session_destroy( )函数彻底销毁session。删除会话的用法将会在案列中实施。
🎶五、首页登录凭证验证
使用WEUI的底部导航构建首页面,之间拷贝对应的资源,在顶部编写PHP代码,启动会话,并判断是否存在登录凭证,如果1不存在就跳到登录页面,如果存在,则进入首页面,并在顶部页面显示用户欢迎页面。
在这里,约定登录凭证保存在session数组中的login_statuis键中,并且登录凭证是一组数据,存放登录用户的ID和姓名。
(1)给首页添加验证【index.php】
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>首页面</title><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"><link rel="stylesheet" href="css/weui.css" /><!-- 自定义的css --><link rel="stylesheet" href="css/demo.css" /></head><body ontouchstart><?php//通过session获取登录信息session_start();$data=$_SESSION['login_status'];if($data==null){header("Refresh:1,Url=del.php");}?><div class="page__bd" style="margin: 10px;"><div class="weui-cells"><div class="weui-cell"><div class="weui-cell__hd"><img src="images/me.png" alt=""></div><div class="weui-cell__bd"><span><?php echo $data['name']?></span><div><?php echo $data['tel']?></div></div> <div class="weui-cell__ft"><a style="color: red;" href="loginOut.php">退出</a></div> </div></div></div><div class="weui-tabbar" style="width: 100%; position: fixed; bottom: 0;"><div class="weui-tabbar__item"><div tyle="display: inline-block; position: relative;"><img src="./images/home.png" alt="" class="weui-tabbar__icon"></div><p class="weui-tabbar__label">首页</p></div><div class="weui-tabbar__item"><img src="./images/type.png" alt="" class="weui-tabbar__icon"><p class="weui-tabbar__label">分类</p></div><div class="weui-tabbar__item"><div style="display: inline-block; position: relative;"><img src="./images/car.png" alt="" class="weui-tabbar__icon"></div><p class="weui-tabbar__label">购物车</p></div><div class="weui-tabbar__item weui-bar__item_on"><img src="./images/me.png" alt="" class="weui-tabbar__icon"><p class="weui-tabbar__label">我</p></div></div></body>
</html>
🎶六、创建登录首页
新建html文件,在登录页面中使用WeUI表单组件构成,主键与表单注册页面类似,登录表单中包含电话和密码,登录时不使用表单提交方式,而是给按钮添加点击事件,在绑定事件login方法中使用AJAX POST提交登录信息。
(1)给首页添加验【del.php】:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><!-- 让网页的宽度自动适应手机屏幕的宽度 --><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0"><title>用户注册</title><!-- 引入 本地 css文件 --><link rel="stylesheet" href="css/weui.css"/><link rel="stylesheet" href="jquery-confirm/jquery-confirm.css"/><!-- 引入本地js文件 --><script src="js/jquery-3.6.1.min.js"></script><script src="jquery-confirm/jquery-confirm.js"></script></head><body><form class="weui-form" id="login_form"><div class="weui-form__text-area"><h2 class="weui-form__title">用户登录</h2></div><div class="weui-form__control-area"><div class="weui-cells__group weui-cells__group_form"><div class="weui-cells"><label class="weui-cell"><div class="weui-cell__hd"><span class="weui-label">手机</span></div><div class="weui-cell__bd"><input class="weui-input" name="tel" placeholder="填写本人手机号" /></div></label><label class="weui-cell"><div class="weui-cell__hd"><span class="weui-label">密码</span></div><div class="weui-cell__bd"><input class="weui-input" name="pwd" placeholder="填写六位密码" type="password" /></div></label></div></div></div><div class="weui-form__tips-area"></div> <!-- 表单提示 --><div class="weui-form__opr-area"><button type="button" class="weui-btn weui-btn_primary" onclick="login()">登录</button></div></form><script>function login(){$.aler({titlr:'提示',content:'按下登录按钮!';})}</script></body>
</html>
🎶七、登录验证
在登录页面用户输入手机和密码,并按下登录键时,触发按钮onclick事件,调用login方法。在login方法中获取手机和密码,使用jQuery中的POST提交方法,将数据提交到修改登录页面进行处理。将获取的密码用MD5加密,然后拼接成查询语句执行。如果存在用户,将用户存储信息存储在会话中,并将执行结果返回调用页面,在此任务中需要修改给首页添加验证的代码。
修改login方法【del.php】:
<script>function login(){//获取表单的内容var tel=$('#login_form input[name=tel]').val();var pwd=$('#login_form input[name=pwd]').val();//表单内容通过ajax进行提交$.post("delyz.php",{"tel":tel,"pwd":pwd},function(res){//将PHP返回的JSON字符串解析成对象var obj=$.parseJSON(res);if(obj.success){ $.confirm({title:'登录提示!',content:obj.msg,buttons:{"确实":function(){//跳转到首页window.location="index.php"}}});}else{$.alert(obj.msg);}})}</script>
修改login方法的运行结果:

(2)给页面添加验证的数据库处理代码怕【delyz.php】:
<?php
// 默认返回前端的数据
$obj=array("success"=>false,"msg"=>"登录失败,用户名或密码错误请重新输入");
// 1.建立数据库shop连接
$conn=mysqli_connect("localhost","root","123456","shop");
//2.编写SQL语句
//获取电话号码和密码
$tel=$_POST['tel'];
$pwd=md5($_POST['pwd']);
$sql="select * from users where tel='$tel' and pwd='$pwd'";
// echo $sql;
//3.执行SQL语句,保存结果及对象
$rs=mysqli_query($conn,$sql);
//4.处理结果集如果存在查询的用户
if(mysqli_num_rows($rs)){//启动会话session_start();//将登录凭证保存//获取第一行数据$row=mysqli_fetch_array($rs);$_SESSION['login_status']=array("id"=>$row['Id'],"name"=>$row['name'],"tel"=>$row['tel'], );
$obj=array("success"=>true,"msg"=>"登录成功请点击进入首页");
}
echo json_encode($obj);
//释放资源,关闭连接
mysqli_free_result($rs);
mysqli_close($conn);
exit;
?>
运行结果图:


🎶八、退出登录
退出登录只需要销毁会话即可,在首页添加一个【退出】按钮链接,点击此按钮会调用登录界面,而首页会话将会销毁,3秒后跳转到登录页面。
(1)给首页添加验证代码【loginOut.php】:
<?php
session_start();
unset($_SESSION["login_status"]);
//页面3秒后进行跳转
header("Refresh:3,Url=del.php");
echo "退出成功,3秒后跳转到登录界面";
?>
运行结果:

结束语🥇
以上就是PHP程序设计
持续更新PHP程序设计教程,欢迎大家订阅系列专栏🔥PHP程序开发你们的支持就是曼亿点创作的动力💖💖💖

相关文章:
【PHP【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
Linux下的常用基本指令
基本指令 前言一、ls 指令语法功能常用选项举例注意要点关于拼接关于 -a关于文件ls与/的联用ls与根目录ls与任意文件夹ls与常用选项与路径 ls -d与ls -ldls与ll 二、pwd命令语法功能常用选项注意要点window与Linux文件路径的区别家目录 三、cd 指令语法功能举例注意要点cd路径.…...
phpstorm环境配置与应用
在 PhpStorm 中配置 PHP 开发环境及进行一些常用的应用设置涉及以下几个主要步骤: ### 1. 安装和激活 PhpStorm - **下载安装**: 访问 JetBrains 官网下载最新版本的 PhpStorm 安装包,然后按照提示进行安装。 - **激活**: 启动 PhpStorm,你可…...
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…...
Hive Aggregation 聚合函数
Hive Aggregation 聚合函数 基础聚合 增强聚合...
Unity 性能优化之GPU Instancing(五)
提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…...
LeetCode 138. 随机链表的复制
目录 1.原题链接: 2.结点拆分: 代码实现: 3.提交结果: 4.读书分享: 1.原题链接: 138. 随机链表的复制 2.结点拆分: ①.拷贝各个结点,连接在原结点后面; ②.处…...
【PC微信小程序点不动处理方法】
描述 在使用电脑小程序抓包的时候发现原来能点的小程序今天不能点了。就是原来有个输入车牌号的输入框点击会出现车牌号键盘,现在不行了,经过卸载安装发现不是微信的问题,是WeChatAppEx.exe 的bug。早期使用的是不带ex的都没有问题升级以后&…...
量化交易:日内网格交易策略.md
哈喽,大家好,我是木头左! 本文将详细介绍日内网格交易策略的原理,并结合Python代码示例,展示如何在掘金平台上实现这一策略。 策略原理 日内网格交易策略的核心思想是在一天的交易时间内,通过设置多个买卖…...
Ubuntu 20.04在Anaconda虚拟环境中配置PyQt4
一、创建一个虚拟环境 1 创建一个python2.7的虚拟环境: conda create -n pyqt4 numpy matplotlib python2.72 在环境中安装几个需要的包: pip install Theano pip install python-opencv3.4.0.14 pip install qdarkstyle pip install dominate二、在主…...
charts3D地球--添加航线
要在地球视角下画出海运路线图 方案 添加 globl 地球创建geo地理坐标系创建canvas对象用于承载地图世界地图this.worldChart //初始化canvas节点let cav document.createElement("canvas");this.$echarts.registerMap("world", geoJson);this.worldCha…...
变色龙还是树懒:揭示大型语言模型在知识冲突中的行为
你是知识变色龙还是树懒?我今天在ICLR学到一个很有趣的术语,叫做证据顺序(order of evidence)。 大模型RAG处理知识冲突的探讨: 在检索增强生成(Retrieval-Augmented Generation, RAG)的过程中,技术团队会将检索到的前几名文档作为证据,并提示(prompt)给大型语言模型(Large La…...
Android OpenMAX(四)OMX Core
假设我们已经写好了所有的OMX组件,有vdec、venc、adec、aenc,接下来问题来了,我们应该如何管理这些组件呢(创建、销毁)?这一篇文章我们向上一层学习OMX Core提供的标准API。 OMX Core代码位于 OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之…...
【Linux】轻量级应用服务器如何开放端口 -- 详解
一、测试端口是否开放 1、测试程序 TCP demo 程序(可参考:【Linux 网络】网络编程套接字 -- 详解-CSDN博客) 2、测试工具 Windows - cmd 窗口 输入命令:telnet [云服务器的公网ip] [port] 二、腾讯云安全组开放端口 1、安全组设…...
git如何查看密码
git查看用户名、邮箱 git config user.name git config user.email 也可以在系统,用户文件夹下面 gitconfig查看 通常无法查看git密码,运行以下命令 git config credential.helper 查看储存的方式,如果是manage 或manage-store则说明是…...
redis脑裂问题
1. 前言 脑裂就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话,…...
日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?
日本率先研发成功6G设备,无线数据速率是5G的百倍,这让日本方面兴奋莫名,毕竟日本在科技方面从1990年代以来太缺少突破的创新了,那么日本为何如今在6G技术上能率先突破呢? 日本在1980年代末期达到顶峰,它的科…...
SpringBoot自动配置源码解析+自定义Spring Boot Starter
SpringBootApplication Spring Boot应用标注 SpringBootApplication 注解的类说明该类是Spring Boot 的主配置类,需要运行该类的main方法进行启动 Spring Boot 应用 SpringBootConfiguration 该注解标注表示标注的类是个配置类 EnableAutoConfiguration 直译&#…...
Kafka 环境配置与使用总结
# 部署教程参考 # 官方教程: https://kafka.apache.org/quickstart # 单机部署kafka参考: https://blog.csdn.net/u013416034/article/details/123875299 # 集群部署kafka参考: # https://blog.csdn.net/zhangzjx/article/details/123679453 # https://www.cnblogs.com/And…...
【算法】滑动窗口——串联所有单词的子串
今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串,有需要借鉴即可。 目录 1.题目2.下面是示例代码3.总结 1.题目 题目链接:LINK 这道题如果把每个字符串看成一个字母,就是另外一道中等难度的题目,即&…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
