当前位置: 首页 > news >正文

【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【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…...

Linux下的常用基本指令

基本指令 前言一、ls 指令语法功能常用选项举例注意要点关于拼接关于 -a关于文件ls与/的联用ls与根目录ls与任意文件夹ls与常用选项与路径 ls -d与ls -ldls与ll 二、pwd命令语法功能常用选项注意要点window与Linux文件路径的区别家目录 三、cd 指令语法功能举例注意要点cd路径.…...

phpstorm环境配置与应用

在 PhpStorm 中配置 PHP 开发环境及进行一些常用的应用设置涉及以下几个主要步骤&#xff1a; ### 1. 安装和激活 PhpStorm - **下载安装**: 访问 JetBrains 官网下载最新版本的 PhpStorm 安装包&#xff0c;然后按照提示进行安装。 - **激活**: 启动 PhpStorm&#xff0c;你可…...

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…...

Hive Aggregation 聚合函数

Hive Aggregation 聚合函数 基础聚合 增强聚合...

Unity 性能优化之GPU Instancing(五)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…...

LeetCode 138. 随机链表的复制

目录 1.原题链接&#xff1a; 2.结点拆分&#xff1a; 代码实现&#xff1a; 3.提交结果&#xff1a; 4.读书分享&#xff1a; 1.原题链接&#xff1a; 138. 随机链表的复制 2.结点拆分&#xff1a; ①.拷贝各个结点&#xff0c;连接在原结点后面&#xff1b; ②.处…...

【PC微信小程序点不动处理方法】

描述 在使用电脑小程序抓包的时候发现原来能点的小程序今天不能点了。就是原来有个输入车牌号的输入框点击会出现车牌号键盘&#xff0c;现在不行了&#xff0c;经过卸载安装发现不是微信的问题&#xff0c;是WeChatAppEx.exe 的bug。早期使用的是不带ex的都没有问题升级以后&…...

量化交易:日内网格交易策略.md

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 本文将详细介绍日内网格交易策略的原理&#xff0c;并结合Python代码示例&#xff0c;展示如何在掘金平台上实现这一策略。 策略原理 日内网格交易策略的核心思想是在一天的交易时间内&#xff0c;通过设置多个买卖…...

Ubuntu 20.04在Anaconda虚拟环境中配置PyQt4

一、创建一个虚拟环境 1 创建一个python2.7的虚拟环境&#xff1a; conda create -n pyqt4 numpy matplotlib python2.72 在环境中安装几个需要的包&#xff1a; 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 程序&#xff08;可参考&#xff1a;【Linux 网络】网络编程套接字 -- 详解-CSDN博客&#xff09; 2、测试工具 Windows - cmd 窗口 输入命令&#xff1a;telnet [云服务器的公网ip] [port] 二、腾讯云安全组开放端口 1、安全组设…...

git如何查看密码

git查看用户名、邮箱 git config user.name git config user.email 也可以在系统&#xff0c;用户文件夹下面 gitconfig查看 通常无法查看git密码&#xff0c;运行以下命令 git config credential.helper 查看储存的方式&#xff0c;如果是manage 或manage-store则说明是…...

redis脑裂问题

1. 前言 脑裂就是指在主从集群中&#xff0c;同时有两个主节点&#xff0c;它们都能接收写请求。而脑裂最直接的影响&#xff0c;就是客户端不知道应该往哪个主节点写入数据&#xff0c;结果就是不同的客户端会往不同的主节点上写入数据。而且&#xff0c;严重的话&#xff0c;…...

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备&#xff0c;无线数据速率是5G的百倍&#xff0c;这让日本方面兴奋莫名&#xff0c;毕竟日本在科技方面从1990年代以来太缺少突破的创新了&#xff0c;那么日本为何如今在6G技术上能率先突破呢&#xff1f; 日本在1980年代末期达到顶峰&#xff0c;它的科…...

SpringBoot自动配置源码解析+自定义Spring Boot Starter

SpringBootApplication Spring Boot应用标注 SpringBootApplication 注解的类说明该类是Spring Boot 的主配置类&#xff0c;需要运行该类的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…...

【算法】滑动窗口——串联所有单词的子串

今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串&#xff0c;有需要借鉴即可。 目录 1.题目2.下面是示例代码3.总结 1.题目 题目链接&#xff1a;LINK 这道题如果把每个字符串看成一个字母&#xff0c;就是另外一道中等难度的题目&#xff0c;即&…...

等保测评安全物理环境测评讲解

等保测评中的安全物理环境测评主要关注信息系统的物理安全保护措施&#xff0c;确保机房、设备和数据的物理安全。以下是安全物理环境测评的关键点讲解&#xff1a; 1. **物理位置选择**&#xff1a; - 机房应选择在具有防震、防风和防雨能力的建筑内。 - 应避免设在建筑…...

TensorRT-llm入门

一、目录 作用TensorRT-llm 为什么快&#xff1f;流程TensorRT-LLM 环境配置大模型 转换、编译与推理如何选择量化类型&#xff1f;lora 大模型如何合并&#xff1f;lora 大模型如何编译&#xff0c;使用&#xff1f;推理加速模型 tensorrRT-LLM、Vllm、fasterTransformer、Be…...

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库&#xff0c;它是 TinyXML 的一个改进版本&#xff0c;专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库&#xff0c;并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…...

JAVA课程设计

一&#xff1a;Java连接mysql数据库 1.1点击进入mysql jar包下载官网 MySQL :: MySQL Community Downloads 将下载好的压缩包进行解压 解压之后下图就是连接数据库所用到的jar包&#xff1a; 将jar包复制到IDEA所用的项目下&#xff0c;放置jar包的目录为lib&#xff0c;需要…...

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考? 能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c; 因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人…...

http代理ip按流量划算还是个数划算?

随着科技的进步和互联网的发展&#xff0c;越来越多的企业在业务上都需要用到代理&#xff0c;那么http代理ip按流量划算还是个数划算&#xff1f;小编接下来就跟大家介绍一下&#xff1a; 首先我们得先了解http代理ip的按流量模式和个数模式分别是什么&#xff1a; 一、按流…...

Banana Pi BPI-F3, 进迭时空K1芯片设计,定位工业级应用,网络通信及工业自动化

香蕉派BPI-F3是一款工业级 8核RISC-V开源硬件开发板&#xff0c;它采用进迭时空&#xff08;SpacemiT&#xff09; K1 8核RISC-V芯片设计&#xff0c;CPU集成2.0 TOPs AI计算能力。4G DDR和16G eMMC。2个GbE以太网接口&#xff0c;4个USB 3.0和PCIe M.2接口&#xff0c;支持HDM…...

安科瑞工业IT产品及解决方案—电源不接地,设备外壳接地【监测系统对地绝缘电阻】

低压配电系统分类及接地保护方案 国际电工委员会&#xff08;iec&#xff09;对各接地方式供电系统的规定规定&#xff1a;(低压&#xff1a;交流1000V以下&#xff09; 低压配电接地、接零系统分为IT、TT、TN三种基本形式。TN分为TN-C&#xff0c;TN-S&#xff0c;TN-C-S三种…...

栈:概念与实现

1.概念 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#xff0c;入数据在栈顶。出栈&#xff1a;栈的删除操作叫做出栈&#xff0c;出数据也在栈顶。栈的元素遵循后进先出LIFO(Last In First Out)的原则。后面进来的数据先出去 2.栈的实现 三种实现方法&#xff0c;数组…...

【Linux】查找服务器中某个文件的完整路径

方法一&#xff1a; 使用 -wholename 来搜索路径&#xff1a; find / -wholename */esm/data.py这个命令会搜索与 */esm/data.py 完全匹配的路径&#xff0c;其中 * 代表任意数量的任意字符。这应该会找到位于任何目录下的 esm/data.py 文件。 可以限定在某个目录下查找&…...