PHPMySQL基础(五):模拟登录后跳转+会话存储功能实现

news2024/12/25 9:21:47

PHP&MySQL基础(一):创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客

PHP&MySQL基础(二):通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客

PHP&MySQL基础(三):处理查询SQL返回的结果集_长风沛雨的博客-CSDN博客

PHP&MySQL基础(四):模拟登录Login功能案例_长风沛雨的博客-CSDN博客


目录

一、前置准备

1.1、登录代码-Login.php

1.2 首页index.php

二、实现登录跳转

2.1 PHP方式实现页面跳转

2.2 JS方式实现页面跳转

三、实现用户信息登录状态的记录

3.1 超全局变量 $_SESSION

3.2 在Login中启动session并存储值

3.3 在index.php中取值

四、关于session


前面搞了一个登录的案例,但是没有实现登录成功以后的页面跳转,同时补充一个session的本地存储功能。

一、前置准备

1.1、登录代码-Login.php

    <?php
        //1、封装数据库请求的方法:接受一个sql语句,返回sql语句的执行结果
        function Conn($sql){
            $res;
            $link = new mysqli('localhost','root','123456','db_test','3306');
            if($link->connect_error){ # 判断如果link对象里面的异常不为空
                switch($link->connect_error){
                    case 1045 : echo " 访问被拒绝,可能用户名或者密码错误";
                    break;
                    case 1049 : echo " 数据库名称错误";
                    break;
                    default:break;
                }
            }else{
                $link->query("SET NAMES utf8"); # 使用连接对象自带的query方法执行sql语句,该sql是用来设置字符集编码
                $res = $link->query($sql); //这里的res是在内部的,要提高声明范围
            }
            mysqli_close($link);
            return $res;
        }

        //3、实现功能:用户登录
        if($_POST){ //3.1 判断post有没有数据
            //3.2 获取表单传递过来的数据
            $userName = $_POST['userName'];
            $pwd = $_POST['pwd'];
            //3.3 判断用户名和密码是否为空
            if($userName && $pwd){
                //3.5 在有账号数据的前提下,去编写sql语句(先查询指定的姓名)
                $selectSql = "SELECT * FROM tb_user WHERE userName='$userName'";
                //3.6 用Conn方法去读取该sql语句
                $res = Conn($selectSql);
                //3.7 去判断这个结果集有没有读取到对应的数据
                if($res->num_rows){ # num_rows是读取到记录的条数,如果为0就是没有了
                    //3.9 去判断密码(读取结果集)
                    $info = mysqli_fetch_object($res);
                    //4.0 判断$info中对应的pwd是不是等于post传进来的pwd
                    if($info->pwd == $pwd){
                        echo "<script>window.alert('登录成功')</script>";
                    }else{
                        echo "<script>window.alert('密码不匹配')</script>";
                    }
                }else{ //3.8 如果没有查询到条数,就是账号不存在
                    echo "<script>window.alert('账号不存在')</script>";
                }
            }else{ // 3.4 否则进行提示
                echo "<script>window.alert('账号和密码不可为空')</script>";
            }
        }
    ?>
    <!-- 2、搭建结构 -->
    <form action="" method="post">
        <div>
            <label for="">账号:</label>
            <input type="text" name="userName">
        </div>
        <div>
            <label for="">密码:</label>
            <input type="password" name="pwd">
        </div>
        <input type="submit" value="登录">
        <a href="javascript:void(0)">注册</a>
    </form>

1.2 首页index.php

<body>
    <h1>欢迎来到首页</h1>
</body>

二、实现登录跳转

在Login文件中,登录校验成功以后,就需要进行一个页面的跳转

 而跳转的方式有两种:一种是以PHP的方式,一种是以JS的方式跳转

2.1 PHP方式实现页面跳转

通过PHP中的方法:header() 实现跳转

//PHP的方式实现跳转
//通过方法:header() 跳转到首页
header("location:./index.php");

2.2 JS方式实现页面跳转

通过JS中的location.href='文件路径'

//通过JS的方式实现页面跳转
echo "<script>window.location.href='./index.php'</script>";

(这里的后续就先用JS的跳转方式了)

三、实现用户信息登录状态的记录

当我们通过登录的页面跳转到首页的时候,我们需要把登录的数据传递过去

那么这个问题的解决方法:采用session会话存储进行登录状态的保持(超全局变量)

3.1 超全局变量 $_SESSION

在PHP中,有一个超全局的变量:$_SESSION

这个变量专门用于存储会话记录的全局变量

而该SESSION变量和其他超全局变量的区别 在于:$_SESSION需要自己手动启动才可使用

1、如果直接输出该超全局变量,则会提示不存在

var_dump($_SESSION); #  直接输出会被提示为不存在的变量

2、使用方法:session_start() 方法启动 session

        # 启动session
        session_start();
        var_dump($_SESSION)

3、赋值session

类似于关联数组的方式

        # 赋值和取值
        $_SESSION['userName'] = '张三';
        var_dump($_SESSION);
        echo $_SESSION['userName'];

 通过这个$_SESSION的超全局变量,差不多就可以实现用户登录后的数据存储了

3.2 在Login中启动session并存储值

回到登录功能的代码模块,找到登录成功的分支作用域

我们只需要完成两步:启动session,和存值

需要存入session的值,可以是前面查询返回的结果集转换为对象(用变量$info存储)后的属性值

 # 1、启动session
 session_start();
 # 2、存值
 $_SESSION['id'] = $info->id;
 $_SESSION['userName'] = $info->userName;
 $_SESSION['pwd'] = $info->pwd;
 $_SESSION['phone'] = $info->phone;
 $_SESSION['birthday'] = $info->birthday;
 $_SESSION['email'] = $info->email;

 # 3、打印测试
 var_dump($_SESSION);

没啥大问题

3.3 在index.php中取值

在Login完成数据的存储以后,回到index页面

在该页面同样需要启动 session

<body>
    <?php
      # 启动session
      session_start();

      # 取值
      echo "<h1>欢迎你:".$_SESSION['userName']."</h1>";
      echo "你的密码是:".$_SESSION['pwd'];
    ?>
</body>

 差不多就是这样子啦

四、关于session

关于会话存储

浏览器从打开域名里面的页面到关闭浏览器之间的过程就是:会话

也就是说:

1、会话:是指浏览器(客户端)从访问某个域名上的网页开始,到整个浏览器(客户端)关闭的整个过程

2、session:是在会话过程,针对同个域名下的页面都有效,除非手动清除或者覆盖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一图看懂 tqdm 模块:一个可在循环和命令行中使用的快速、可扩展的进度条,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 tqdm 模块&#xff1a;一个可在循环和命令行中使用的快速、可扩展的进度条&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&…

软考高级架构师笔记-5计算机网络

目录 1. 前言 & 考情分析2. 网络功能和分类2.1 通信技术3. OSI七层模型及协议3. 1 局域网和广域网协议3. 2 协议3. 3 交换技术、路由、传输介质4 IP地址5 网络存储技术6 其它考点8. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔…

chatgpt赋能python:Python中未定义变量的默认值

Python中未定义变量的默认值 在Python编程中&#xff0c;有时候我们会使用未经定义的变量。如果这些变量没有被定义&#xff0c;那么它们将没有任何值。在这篇文章中&#xff0c;我们将讨论Python中未定义变量默认值的问题&#xff0c;并深入研究为什么这些默认值如此重要。 …

华为OD机试真题B卷 Java 实现【寻找关键钥匙】,附详细解题思路

一、题目描述 小强正在参加《密室逃生》游戏&#xff0c;当前关卡要求找到符合给定 密码K&#xff08;升序的不重复小写字母组成&#xff09;的箱子&#xff0c;并给出箱子编号&#xff0c;箱子编号为1~N。 每个箱子中都有一个字符串s&#xff0c;字符串由大写字母&#xff0…

改进YOLOv5,利用HRNet高分辨率特征金字塔的全新物体检测突破

目录 一、介绍1、物体检测的背景与重要性2、HRNet和YOLOv5的概述&#xff08;1&#xff09;HRNet的概述&#xff08;2&#xff09;YOLOv5的概述 二、HRNet的架构1、HRNet的基本单元2、HRNet的高分辨率特征金字塔3、HRNet的体系结构4、HRNet的特点5、HRNet的局限性 三、YOLOv5的…

chatgpt赋能python:Python中转化为列表的详细介绍

Python中转化为列表的详细介绍 Python是一门高级编程语言&#xff0c;它使用起来简单易学&#xff0c;被广泛应用于大数据处理、科学计算、机器学习等领域。在Python编程中&#xff0c;列表是一种非常重要的数据结构&#xff0c;它允许我们存储和操作一组数据&#xff0c;并且…

jenkins —— pipeline基础语法与示例

一、Jenkins介绍 二、Jenkins Pipeline介绍 Jenkins Pipeline总体介绍 1.Pipeline 是Jenkins 2.X核心特性&#xff0c;帮助Jenkins实现从CI到CD与DevOps的转变 2.Pipeline 简而言之&#xff0c;就是一套运行于Jenkins上的工作流框架&#xff0c;将原本独立 运行于单个或者多个…

GPT-4 的 6 个最佳使用场景

https://www.howtogeek.com/884077/best-uses-for-chatgpt-4/ 作者&#xff1a;SYDNEY BUTLER 无论是在 ChatGPT 中还是通过 API&#xff0c;对 OpenAI 的 GPT-4 模型的访问比 GPT-3.5 限制更多。这意味着你需要慎重考虑在何种情况下使用 GPT-4&#xff0c;并选择性地将最适合…

浙大知识图谱基础:学习笔记

0 基础知识 知识图谱中&#xff0c;知识的结构化表示主要有符号表示和向量表示两类方法。符号表示包括&#xff1a;一阶谓词逻辑&#xff0c;语义网络&#xff0c;描述逻辑和框架系统等。当前主要采用基于图的符号化知识表示&#xff0c;最常用的是有向标记图。 有向标记图分为…

SpringBoot统一功能处理(统一处理用户登陆权限验证、统一异常处理以及统一数据返回格式)

目录 1. SpringBoot统一功能处理简介 2. 统一处理用户登陆验证 2.1 原生SpringAOP实现统一登陆验证的问题 2.2 Spring拦截器实现用户统一登陆验证 2.3 扩展: 统一访问前缀添加 3. 统一异常处理 4. 统一数据返回格式 4.1 统一数据返回格式的必要性 4.2 实现统一数据返…

C++ vector类成员函数介绍

目录 &#x1f914;vector模板介绍&#xff1a; &#x1f914;特点&#xff1a; &#x1f914;vector的成员函数&#xff1a; &#x1f50d;vector构造函数&#xff1a; &#x1f50d;vector赋值函数 &#x1f50d;vector容器的判断函数 resize函数的重点内容&#xff1a; …

chatgpt赋能python:Python中的并:优化代码执行效率的利器

Python中的并&#xff1a;优化代码执行效率的利器 Python作为一种优秀的编程语言&#xff0c;被广泛使用于各种各样的项目中。然而&#xff0c;随着程序的不断扩张&#xff0c;代码的复杂度日益增加&#xff0c;执行效率也愈加遇到了严峻的挑战。在这种情况下&#xff0c;Pyth…

Linux系统下imx6ull QT编程—— Ubuntu 下编写程序(一)

Linux QT编程 文章目录 Linux QT编程前言一、C简介二、C环境设置1.安装编译 C 语言和 C的环境。2.创建文件编写代码3.编译运行代码 总结 前言 绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一个 C源文件。通过编写最简单的示例“Hello,World QCX”。 一、C简介 C &#xff08;c…

【分布式应用】ELK企业级日志分析系统

一、ELK 简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 1.1 ELK各组件介绍 ElasticSearch&#xff1a; 是基于Lucene&#xff08;一个…

Scala初识

1.scala简介 是一种多范式的编程语言&#xff0c;其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;并兼容现有的Java程序。 scala特点 1.Scala是面向对象的 Scala是一种纯粹的面向对象语言&#xff0c;每一个…

Node.js 中的代码调试

目录 1、启用 Inspector 2、安全隐患 3、Inspector 客户端 4、启用远程调试的情形 5、以前的Debugger 1、启用 Inspector 当使用 --inspect 开关时&#xff0c;Node.js 进程开始侦听调试客户端&#xff0c;默认情况下侦听 127.0.0.1:9229 的域名和端口号&#xff1b;每个…

华为OD机试真题B卷 Java 实现【Linux 发行版的数量】,附详细解题思路

一、题目描述 Linux 操作系统有多个发行版&#xff0c;distrowatch.com 提供了各个发行版的资料。这些发行版互相存在关联&#xff0c;例如 Ubuntu 基于 Debian 只开发而 Mint 又基于 Ubuntu 开发&#xff0c;那么我们认为 Mint 同 Debian 也存在关联。 发行版集是一个或多个…

用Python求最大公约数和最小公倍数(51)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是最大公约数&#xff1f; 如何用Python求最大公约数&#xff1f; 什么是最小公倍数&#xff1f; 如何用Pyt…

chatgpt赋能python:Python中的连接符:介绍与应用

Python中的连接符&#xff1a;介绍与应用 在Python编程中&#xff0c;连接符起着关键性的作用&#xff0c;它是连接不同代码部分的纽带。本篇文章将重点介绍几种常用的Python连接符。 一、加号连接符&#xff08;&#xff09; 加号连接符最常见&#xff0c;用于连接不同的字…

一文读懂TSC时钟: (x86_64/arm64)实现介绍和编程使用

Linux(16)之Time Stamp Counter Author&#xff1a;Once Day Date&#xff1a;2023年5月30日 参考文档: 4. Environment Abstraction Layer — Data Plane Development Kit 23.03.0 documentation (dpdk.org)DPDK: lib/eal/include/generic/rte_cycles.h File Reference测量…