博客列表 >基于session的用户跟踪

基于session的用户跟踪

longlong
longlong原创
2020年07月19日 19:55:41679浏览

1. 简单用户跟踪

本例将基于session,写一个简单的用户跟踪

用到以下几个文件:

  • config.php
  1. <?php
  2. define('DB_HOST','php.edu'); // 数据库域名
  3. define('DB_USER','root'); // 数据库用户名
  4. define('DB_PWD','root'); // 数据库密码
  5. define('DB_PORT','3306'); // 数据库端口号
  6. define('DB_TYPE','mysql'); // 数据库类型
  7. define('DB_NAME','first'); // 数据库中需要被操作的数据表名
  8. define('DB_CHARSET','utf8'); // 编码方式
  9. define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET); // 数据源名
  • login.php:
  1. <?php
  2. // 开启会话
  3. session_start();
  4. // 引入配置文件
  5. require "config.php";
  6. // 连接数据库
  7. try {
  8. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
  9. // var_dump($pdo);
  10. } catch (Throwable $e) {
  11. echo $e->getMessage();
  12. } catch (PDOException $e) {
  13. echo $e->getMessage();
  14. }
  15. // 点击退出登录,清空$_SESSION数组
  16. if ($_GET['action']=='loginOut') {
  17. $_SESSION = [];
  18. // print_r($_SESSION);
  19. }
  20. ?>
  21. <!DOCTYPE html>
  22. <html lang="en">
  23. <head>
  24. <meta charset="UTF-8">
  25. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  26. <title>登录</title>
  27. </head>
  28. <body>
  29. <h1>用户登录</h1>
  30. <form action="check.php" method="POST">
  31. <div>
  32. <label for="">账户:</label>
  33. <input type="text" name="username" id="username">
  34. </div>
  35. <div>
  36. <label for="password">密码:</label>
  37. <input type="password" name="password" id="password">
  38. </div>
  39. <button>登录</button>
  40. </form>
  41. </body>
  42. </html>
  • check.php:
  1. <?php
  2. // 开启会话
  3. session_start();
  4. // 指定接收数据类型和编码方式
  5. header('content-type:text/html;charset=utf-8');
  6. // 接收表单过来的数据
  7. $username = $_POST['username'];
  8. $password = $_POST['password'];
  9. // 引入配置文件
  10. require "config.php";
  11. // 连接数据库
  12. try {
  13. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
  14. // var_dump($pdo);
  15. } catch (Throwable $e) {
  16. echo $e->getMessage();
  17. } catch (PDOException $e) {
  18. echo $e->getMessage();
  19. }
  20. // sql查询语句
  21. $sql = "SELECT `id`,`username`,`password` FROM `student` WHERE `username`=? AND `password`=?";
  22. // 准备执行
  23. $stmt = $pdo->prepare($sql);
  24. // var_dump($stmt);
  25. // 绑定
  26. $stmt->bindParam(1,$username);
  27. $stmt->bindParam(2,$password);
  28. // 执行
  29. $stmt->execute();
  30. // 判断:如果验证通过,先清空SESSION,然后再把username储存在SESSION中,便于index.php判断
  31. if ($stmt->rowCount()==1) {
  32. $_SESSION = [];
  33. $_SESSION['username'] = $username;
  34. exit("<script>
  35. alert('登录成功,点击确定进入主页');
  36. location.href='index.php';
  37. </script>
  38. ");
  39. }else{
  40. exit("
  41. <script>
  42. alert('用户名或密码输入有误,请重新输入');
  43. location.href='login.php';
  44. </script>
  45. ");
  46. }
  • index.php:
  1. <?php
  2. // 开启会话控制
  3. session_start();
  4. // 引入配置文件
  5. require "config.php";
  6. // 连接数据库
  7. try {
  8. $pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
  9. // var_dump($pdo);
  10. } catch (Throwable $e) {
  11. echo $e->getMessage();
  12. } catch (PDOException $e) {
  13. echo $e->getMessage();
  14. }
  15. // print_r($_SESSION);
  16. // 1. 如果没有通过login.php登录页面,获取不到$_SESSION['username'],则不能进入主页
  17. // 2. 如果直接进入主页,$_SESSION是一个空数组
  18. // 3. 所以判断如果SESSION为空数组,说明没有经过登录操作,那么使页面跳转到登录页面
  19. if (empty($_SESSION)) {
  20. exit("
  21. <script>
  22. alert('请登录后再进入主页');
  23. location.href='login.php';
  24. </script>
  25. ");
  26. }
  27. ?>
  28. <!DOCTYPE html>
  29. <html lang="en">
  30. <head>
  31. <meta charset="UTF-8">
  32. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  33. <title>主页</title>
  34. </head>
  35. <body>
  36. <h1>商城主页</h1>
  37. <hr>
  38. <p>欢迎您&nbsp;&nbsp;<?php echo $_SESSION['username']; ?></p>
  39. <a href="login.php?action=loginOut">退出账户</a>
  40. </body>
  41. </html>

麻烦老师看看写得对不对,因为这不是课堂作业。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
灭绝师太2020-07-20 15:02:111楼
只判断是不是空数组还不够严谨,取session中的username对比,最好再存一个标记登录成功的isLogin存session。另外 ,用户退出登录,要释放$_SESSION变量, 销毁session文件。