博主信息
邯郸易住宋至刚
博文
53
粉丝
3
评论
0
访问量
25560
积分:0
P豆:127.5

11月22日-SESSION实战-***线上九期班

2019年11月27日 18:43:15阅读数:364博客 / 邯郸易住宋至刚/ 作业

一、SESSION实战

(一)connect.php

代码:

  1. <?php
  2. # connect.php文件
  3. // 数据库连接参数
  4. $db = [
  5. 'type' => 'mysql',
  6. 'host' => '127.0.0.1',
  7. 'dbname' => 'pdo',
  8. 'username' => 'root',
  9. 'password' => '111',
  10. ];
  11. // 配置数据源DSN信息
  12. $dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
  13. // 连接数据库
  14. try {
  15. $pdo = new PDO($dsn, $db['username'], $db['password']);
  16. echo 'Connection success!';
  17. echo '<hr>';
  18. } catch (PDOException $e) {
  19. die('Connection Failed: ' . $e->getMessage());
  20. }

(二)index.php

代码

  1. <?php
  2. //开启会话
  3. session_start();
  4. // 为简化程序, 使用了一个中间层: 请求派发器,类似于框架的控制器, 对用户的请求进行集中处理
  5. // 1: 已登录: 显示出用户的登录信息, 显示退出按钮
  6. if (isset($_SESSION['name']) && $_SESSION['name'] === 'admin') {
  7. echo '用户: ' . $_SESSION['name'] . '已登录<br>';
  8. echo '<a href="dispatch.php?action=logout">退出</a>';
  9. } else {
  10. // 2. 未登录,就跳转到登录页面
  11. echo '<a href="dispatch.php?action=login">请登录</a>';
  12. }

结果:

(三)dispatch.php

代码

  1. <?php
  2. // 只需要在该脚本中打开会话即可, check.php/logout.php/login.php都是由它调用的, 不必重复开启
  3. session_start();
  4. // 连接数据库
  5. require __DIR__ . '/connect.php';
  6. // 获取请求参数
  7. $action = isset($_GET['action']) ? $_GET['action'] : 'login';
  8. $action = htmlentities(strtolower(trim($action)));
  9. // 请求分发
  10. switch ($action) {
  11. // 1. 登录页面
  12. case 'login':
  13. // 加载登录表单
  14. include __DIR__ . '/login.php';
  15. break;
  16. // 2. 验证登录
  17. case 'check':
  18. include __DIR__ . '/check.php';
  19. break;
  20. // 3. 退出登录
  21. case 'logout':
  22. include __DIR__ . '/logout.php';
  23. break;
  24. // 默认操作
  25. default:
  26. header('Location: index.php');
  27. echo '<script>location.assign("index.php");</script>';
  28. }

结果

(四)login.php

代码

  1. <?php
  2. // 防止用户重复登录
  3. if (isset($_SESSION['name'])) {
  4. echo '<script>alert("不要重复登录");location.assign("index.php");</script>';
  5. }
  6. ?>
  7. <!doctype html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <title>用户登录</title>
  12. </head>
  13. <body>
  14. <h3>用户登录</h3>
  15. <form action="dispatch.php?action=check" method="post" onsubmit="return isEmpty();">
  16. <p>
  17. <label for="phone">手机:</label>
  18. <input type="phone" name="phone" id="phone">
  19. </p>
  20. <p>
  21. <label for="password">密码:</label>
  22. <input type="password" name="password" id="password">
  23. </p>
  24. <p>
  25. <button>提交</button>
  26. </p>
  27. </form>
  28. <script>
  29. function isEmpty() {
  30. var phone = document.getElementById('phone').value;
  31. var password = document.getElementById('password').value;
  32. if (phone.length === 0 || password.length === 0) {
  33. alert('手机和密码不能为空');
  34. return false;
  35. }
  36. }
  37. </script>
  38. </body>
  39. </html>

结果

(五)check.php

代码:

  1. <?php
  2. // 1.判断用户的请求类型是否正确?
  3. if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  4. // 2.获取表单数据
  5. $phone = $_POST['phone'];
  6. $password = md5($_POST['password']);
  7. //echo $phone . '<br>' .$password;
  8. // 3. 用用户表user.dbf进行验证
  9. $sql = "SELECT * FROM `user` WHERE `phone` = :phone AND `password` = :password LIMIT 1";
  10. //echo $sql;
  11. $stmt = $pdo->prepare($sql);
  12. $stmt -> bindParam('phone',$phone,PDO::PARAM_STR);
  13. $stmt -> bindParam('password',$password,PDO::PARAM_STR);
  14. $stmt -> execute();
  15. //$stmt->execute(['phone' => $phone, 'password' => $password]);
  16. $user = $stmt->fetch(PDO::FETCH_ASSOC);
  17. //var_dump($stmt->execute(['phone' => $phone, 'password' => $password]));
  18. //die();
  19. // 4. 判断验证的结果
  20. if (false === $user) {
  21. // 验证失败,返回上一下页面
  22. echo '<script>alert("验证失败");history.back();</script>';
  23. die;
  24. }
  25. // 验证成功,将用户的信息写到session
  26. $_SESSION['name'] = $user['name'];
  27. echo '<script>alert("登录成功");location.assign("index.php");</script>';
  28. exit;
  29. } else {
  30. die('请求类型错误');
  31. }

结果:

(六)logout.php

代码

  1. <?php
  2. // 必须在用户已经登录的情况下再退出
  3. if (isset($_SESSION['name'])) {
  4. session_destroy();
  5. echo '<script>alert("退出成功");location.assign("index.php");</script>';
  6. } else {
  7. // 要求用户先登录
  8. echo '<script>alert("请先登录");location.assign("login.php");</script>';
  9. }

结果

二、手抄代码

批改老师:查无此人查无此人

批改状态:合格

老师批语:完成的不错,继续加油

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论