博客列表 >11月22日_session用户登录实战 - 九期线上班

11月22日_session用户登录实战 - 九期线上班

只猫
只猫原创
2019年11月24日 20:11:37566浏览

SESSION实现用户登录、记录、退出登录

连接数据库 connect.php

  1. <?php
  2. $db = [
  3. 'type' => 'mysql',
  4. 'host' => 'localhost',
  5. 'dbname' => 'php_2019',
  6. 'username' => 'root',
  7. 'password' => '********'
  8. ];
  9. $dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
  10. $username = $db['username'];
  11. $password = $db['password'];
  12. try{
  13. $pdo = new PDO($dsn,$username,$password);
  14. }catch(PDOException $e){
  15. die('连接失败'.$e->getMessage());
  16. }

user表已创建

1.index.php

  1. <?php
  2. session_start();
  3. //主页
  4. if(isset($_SESSION['name']))
  5. {
  6. echo '用户:'.$_SESSION['name'].'已登录<br>';
  7. echo '<a href="dispatch.php?action=logout">退出登录</a>';
  8. }else{
  9. echo '<a href="dispatch.php?action=login">请登录</a>';
  10. }

2.dispatch.php

  1. <?php
  2. //开启会话
  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. case 'login':
  12. include __DIR__.'/login.php';
  13. break;
  14. case 'check':
  15. include __DIR__.'/check.php';
  16. break;
  17. case 'logout':
  18. include __DIR__.'/logout.php';
  19. break;
  20. default:
  21. header('Location:index.php');
  22. echo '<script>location.assign("index.php");</script>';
  23. }

3.login.php

  1. <?php
  2. if(isset($_SESSION['name'])){
  3. echo '<script>alert("您已登录,请不要重复登录");location.assign("index.php");</script>';
  4. }
  5. ?>
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8">
  10. <title>用户登录</title>
  11. </head>
  12. <body>
  13. <h3>用户登录</h3>
  14. <form action="dispatch.php?action=check" method="post">
  15. <p>
  16. <label for="name">用户名:</label>
  17. <input type="text" name="name" id="name">
  18. </p>
  19. <p>
  20. <label for="password">密码:</label>
  21. <input type="password" name="password" id="password">
  22. </p>
  23. <p><button>登录</button></p>
  24. </form>
  25. </body>
  26. </html>

4.check.php

  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] === 'POST'){
  3. if(!empty($_POST['name']) && !empty($_POST['password'])){
  4. $name = $_POST['name'];
  5. $password = $_POST['password'];
  6. $sql = 'SELECT * FROM `user` WHERE `username` = :username AND `password` = :password LIMIT 1';
  7. $stmt = $pdo->prepare($sql);
  8. $stmt->execute(['username'=>$name,'password'=>$password]);
  9. $user = $stmt->fetch(PDO::FETCH_ASSOC);
  10. }else{
  11. echo '<script>alert("用户名或密码未填写");location.assign("login.php");</script>';
  12. }
  13. if($user === false){
  14. echo '验证失败';
  15. die;
  16. }
  17. //验证成功 写入session
  18. $_SESSION['name'] = $user['username'];
  19. echo '<script>alert("登录成功");location.assign("index.php");</script>';
  20. exit;
  21. }else{
  22. die('请求类型错误');
  23. }

5.logout.php

  1. <?php
  2. if(isset($_SESSION['name'])){
  3. //清除session
  4. session_destroy();
  5. echo '<script>alert("退出成功");location.assign("index.php");</script>';
  6. }else{
  7. echo '<script>alert("请先登录");location.assign("index.php")</script>';
  8. }

index.php

login.php

index.php

logout.php

手抄:

总结:经过这次课程,搞明白了session和cookie的作用和它们的区别。以前对这两个概念只是知道也看了很多遍相关的知识,但是不会用。cookie和session用于在同一个网站项目中不同的页面之间传递用户数据,让用户实现只输入一次数据就可以把数据保存下来在每一个页面中都可以使用。课上老师介绍的很清楚。session数据存在服务端,session的id以cookie的形式保存在客户端以便于服务器区分用户对应的是哪个session文件。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议