session
解释
前端FE:
+ 有两个页面
=> 一个login页面
-> 把用户名密码发送给后端, 后端只会返回结果给登录页, 所以登录页知道是否登录了
=>一个home首页: 那home 页怎么知道?
后端BE:
+ 有一个"保险柜" 叫session
=> 登录成功后我向保险柜session里面存储一个信息, 比如 login:1
=> 保险柜session有密码: xxxxxxxx yyyyyyyy. 前端留一半xxxxxxxx, 后端留一半yyyyyyyy
=> 这两个专门开启Session空间的密码合在一起叫 session_id
=> 那 home 页只要发送请求就把一半密码带过来
-> 通过 cookie
=> 后端接收到前端带来的一半密码
-> 如果打开保险柜, 发现 Login:1, 证明登陆过
-> 如果打开保险柜, 没有 Login:1, 证明你没有登陆过
定义
+ 一个存在于 服务器 端的存储空间
+ 当他打开的那一瞬间, 就会生成一个 "密码"
+ 这个密码会自动存储到 cookie 里面
+ 等到返回前端的时候,会自动把这个带回去
+ 只要你想向 session 空间里面存储内容或者获取内容
=> 必须先开启, 后使用, 否则报错
开启 session 空间
+ session_start();
存储一些数据
+ PHP 有一个内置的 关联型数组就叫做 $_SESSION
// 1. 开启 session 空间
/*
当我在浏览器打开 localhost/01_session.php 文件的时候
就会执行 session_start() 这段代码
后端就会开启一个存储空间, 同时生成一段 密码
同时把密码的一半放在 cookie 里面
前端访问 localhost/01_session.php 本身就是一个请求
此时后端是会回一个响应
响应回到前端了, 那么此时看到 cookie 空间里面就应该有一个 session_id 的存在
*/
session_start();
注: 如果你自己写一个key为PHPSESSID的cookie, 也写个相同位数的值, 也会打开session空间, 但是具体打开空间里哪一个格子是不确定的, 获得的内容也不是原先那个
// 2. 存储
$_SESSION['login'] = 1;
注: 存储前端是看不到的, 得结合其他案例, 那我们先来输出看看
echo $_SESSION['login']
此时返回 1
login 小案例
index.php
<?php
// 打开 session 空间
// 从里面拿到 login 和 username 信息
// 只要有, 证明登陆过
// 没有, 就没有登陆过
session_start();
// 默认打开文件夹, 首先打开index.php
// 打开 session 空间时, 也会生成 session_id
// 此时session里还没有内容, 所以获取会有 notice 提醒报错
// 逻辑: 判断一下 $_SESSION 里面有没有, 有再获取, 没有就不获取
// $username = $_SESSION['username'];
// isset() 判断有没有
// $res = isset($_SESSION['username']);
if(isset($_SESSION['username'])){
$username = $_SESSION['username'];
}else{
$username = '请登录!';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1><?php echo $username; ?></h1>
<button>
<a href="./login.html">去登陆</a>
</button>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- GET POST -->
<form action="./login.php" method="POST">
用户名: <input type="text" autocomplete="off" name="username">
<br>
密码: <input type="text" autocomplete="off" name="password">
<button>登录</button>
</form>
</body>
</html>
login.php
<?php
/*
接收前端的 GET 请求使用 $_GET
接收前端的 POST 请求使用 $_POST
*/
// 1. 接收参数
$username = $_POST['username'];
$password = $_POST['password'];
// 2. 去数据库查询
$link = mysqli_connect('localhost','root','123456','testdb');
$sql = "SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'";
$res = mysqli_query($link, $sql);
$data = mysqli_fetch_all($res, MYSQLI_ASSOC);
// 3. 进行判断
if(count($data)){
// 表示登陆成功
// 存储一个简单的信息到 session 空间里
// 就会有一半密码存储在 cookie 里面了
session_start();
$_SESSION['login'] = 1;
$_SESSION['username'] = $data[0]['username'];
header('location: ./index.php');
}else{
// 表示登录失败
echo '用户名密码错误!';
}
?>
点击去登陆
输入错误信息
输入正确信息