JS-part16.7-session

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 '用户名密码错误!';
  }


?>

在这里插入图片描述
点击去登陆
在这里插入图片描述

输入错误信息
在这里插入图片描述

输入正确信息
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值