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:是在会话过程,针对同个域名下的页面都有效,除非手动清除或者覆盖