【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>
	<?php
    echo $_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程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

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

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

相关文章

MyBatis——MyBatis 参数处理

一、单个简单类型参数 简单类型包括&#xff1a; byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 属性&#xff1a;告诉 MyBatis 参数的类型 MyBatis 自带类型自动推断机制…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上&#xff0c;Linux是内核。而术语上&#xff0c;我们通常说的Linux是完整的操作系统&#xff0c;其实称为"Linux发行版"&#xff0c;是将Linux内核和应用系统打包&#xff0c;由不同的发行家族发行了不同版本。Linux发行版众多&#xff0c;主要有RedH…

Debian常用命令:高效管理与运维的必备指南

在Linux世界中&#xff0c;Debian以其稳定性、安全性和开源精神赢得了广大用户的青睐。作为一个基于Linux的操作系统&#xff0c;Debian拥有丰富且强大的命令行工具&#xff0c;这些命令对于系统管理员和开发者来说至关重要。本文将为您介绍一系列Debian系统中的常用命令&#…

基于Javaee的影视创作论坛的设计与实现+vue论文

系统简介 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装影视创作论坛软件来发挥其高效地信息处理的作用&#xf…

询问贴:这要怎么设置捏,寻思着总不该一个一个挖空吧????

这要怎么设置捏&#xff0c;寻思着总不该一个一个挖空吧&#xff1f;&#xff1f;&#xff1f;&#xff1f;

【javaSE】认识异常(1)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

联丰策略股票杠杆股票交易市场突破3100点!A股稳了?

查查配近期,大盘再次来到3100点附近。 重要关口得到有效突破,市场情绪明显升温,甚至有投资者高喊:反转已经在路上!但也有谨慎者认为,市场仍有回调风险,围绕3000点震荡或是接下来的主旋律。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。…

HTML炫酷的相册

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家带来一个炫酷的旋转相册&#xff0c;快来解锁属于你的独家记忆吧&#xff01; HTML简介 HTML&#xff08;全称为超文本标记语言&#xff09;是一种用于创建网页结构和内容的标记语…

Python 编程语言中的 None 到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None&#xff1f; 在 Python 编程语言中&#xff0c;None 是一个特殊的常量&#xff0c;它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

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

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

电商数据都能采集监测吗

品牌在做市场分析、渠道控价时&#xff0c;一般都需要先采集电商数据&#xff0c;数据的采集&#xff0c;不是只涉及部分平台&#xff0c;分析的准确和控价的全面性&#xff0c;使得数据的要求也会被提高&#xff0c;品牌要能采集不同平台、不同店铺的SKU数据&#xff0c;同时还…

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架

电子产品量产测试与烧写工具。这是一套软件&#xff0c;用在我们的实际生产中&#xff0c; 有如下特点&#xff1a; 1.简单易用&#xff1a; 把这套软件烧写在 SD 卡上&#xff0c;插到 IMX6ULL 板子里并启动&#xff0c;它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…

Scratch四级:第08讲 排序算法

第08讲 排序算法 教练&#xff1a;老马的程序人生 微信&#xff1a;ProgrammingAssistant 博客&#xff1a;https://lsgogroup.blog.csdn.net/ 讲课目录 常考的排序算法项目制作&#xff1a;“三个数排序”项目制作&#xff1a;“成绩查询”项目制作&#xff1a;“排序”项目制…

使用LLaMA Factory来训练智谱ChatGLM3-6B模型

使用LLaMA Factory来训练智谱ChatGLM3-6B模型时&#xff0c;以下是一个训练过程&#xff1a; 1. 环境搭建 a. 安装Python和Anaconda 下载并安装适合你操作系统的Python版本&#xff08;推荐Python 3.10或更高版本&#xff09;。安装Anaconda&#xff0c;以管理Python环境和依…

“等保测评通过指南:打造企业安全生态环境“

等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是企业构建安全生态环境的重要环节。以下是通过等保测评的指南&#xff0c;旨在帮助企业打造一个安全的网络环境&#xff1a; 理解等保测评的重要性&#xff1a; 等保测评是确保企业信息系统安全得到有效保护的重要标准…

轻松上手Spring AOP,掌握切面编程的核心技巧

文章目录 AOP 是什么AspectJSpring AOP切点表达式execution()语法结构示例注意事项 通知&#xff08;Advice&#xff09;类型如何使用准备阶段定义切面定义并使用切点测试 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…

轨迹规划 | 图解纯追踪算法Pure Pursuit(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 纯追踪算法原理推导2 自适应纯追踪算法(APP)3 规范化纯追踪算法(RPP)4 仿真实现4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划…

Android面试题之Kotlin和Java之间互操作

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 互操作性和可空性 要注意Java中所有类型都是可空的String!表示平台数据类型 public class JavaTest {public String generateName() {return …

瞬息全宇宙——平行宇宙终极教程,手把手教你做出百万点赞视频

最近一种叫“瞬息全宇宙”的视频火了&#xff0c;抖音一期视频百万赞&#xff0c;各个博主视频都在带瞬息全宇宙这个标签&#xff0c;于是就有很多朋友催我出教程了&#xff0c;在琢磨了几天之后&#xff0c;终于整出来了 教程包含了插件的安装&#xff0c;界面的讲解&#xff…

for 双重循环

一.双循环&#xff1a; 可以使用嵌套循环来实现脚本的双层循环&#xff0c;示例代码如下 1.显示外循环是$a 内循环$b encho -e \t 是制表符 2.9 9乘法表 for 循环&#xff1a; echo -n是不换行输出 while循环: 3.输出长度宽度都为9个星的矩形 for循环 while循环 …