博主信息
博文 24
粉丝 1
评论 0
访问量 26922
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
使用Cookie和PDO实现用户登陆退出案例-7月17日作业
知行合一
原创
1578人浏览过

演示效果如下

数据库截图如下

通用文件datebase.php代码如下

  1. <?php
  2. define('DB_HOST','localhost');
  3. define('DB_USER','phpcnyizhi');
  4. define('DB_PWD','phpcnyizhi');
  5. define('DB_NAME','phpcnyizhi');
  6. define('DB_PORT','3306');
  7. define('DB_TYPE','mysql');
  8. define('DB_CHARSET','utf8');
  9. define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET.";port=".DB_PORT);
  10. //定义PDO的DSN,数据源名,包括主机名,端口号和数据库名。
  11. ?>

登陆页面login.php代码如下

  1. <?php
  2. if ($_GET["action"] == "logout"){
  3. setcookie("username","",time()-3600);
  4. setcookie("auth","",time()-3600);
  5. exit(
  6. " <script>
  7. alert('退出成功');
  8. location.href='login.php';
  9. </script>
  10. "
  11. );
  12. }
  13. if(isset($_COOKIE['username']) && $_COOKIE['auth']){
  14. exit(
  15. "
  16. <script>
  17. alert('您已经登陆');
  18. location.href='index.php';
  19. </script>
  20. "
  21. );
  22. }
  23. ?>
  24. <style>
  25. form{border: 1px solid #ccc; width: 300px; margin: 20px auto; text-align: center;}
  26. label{display: block; margin: 20px 0;}
  27. </style>
  28. <form action="check.php" method="post">
  29. <label>用户名:<input type="text" name="username" placeholder="请输入用户名" require></label>
  30. <label>密码:<input type="password" name="password" placeholder="请输入密码" require</label>
  31. <label>七天自动登陆:<input type="checkbox" name="autologin" value="1"></label>
  32. <label><input type="submit" name="submit"></label>
  33. </form>

检测页面check.php代码

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. $username=$_POST['username'];
  4. $password=md5($_POST['password']);
  5. $autologin=$_POST['autologin'];
  6. require('datebase.php');
  7. try{
  8. //数据库连接,得到一个PDO对象 不要把所有的代码写须Try中,非常消耗性能。
  9. $pdo=new pdo(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING,]);
  10. }
  11. //捕捉特定于数据库信息的PDOException异常
  12. catch(PDOException $e){
  13. echo $e->getMessage();
  14. }
  15. //捕捉拥有Throwable接口的错误或者其它异常
  16. catch(Throwable $e){
  17. echo $e->getMessage();
  18. }
  19. $sql="SELECT `username`,`password`,`id` FROM `yizhi_user` WHERE `username`=? AND `password`=?";
  20. $stmt=$pdo->prepare($sql);
  21. $stmt->bindParam(1,$username);
  22. $stmt->bindParam(2,$password);
  23. $stmt->execute();
  24. $res=$stmt->fetch(PDO::FETCH_ASSOC);
  25. if($stmt->rowCount()==1){
  26. //新登陆的时候,把其它用户Cookies信息删除了
  27. setcookie("username","",time()-3600);
  28. setcookie("auth","",time()-3600);
  29. //选择了记住密码
  30. if(!empty($autologin)){
  31. setcookie("username",$username,strtotime("+7 days"));
  32. $salt="yizhi"; //加混淆符号
  33. $auth=md5($username.$password.$salt).','.$res['id'];
  34. setcookie("auth",$auth,strtotime("+7 days"));
  35. }
  36. else{
  37. setcookie("username",$username);
  38. $salt="yizhi"; //加混淆符号
  39. $auth=md5($username.$password.$salt).','.$res['id'];
  40. setcookie("auth",$auth);
  41. }
  42. exit("
  43. <script>
  44. alert('登陆成功');
  45. location.href='index.php';
  46. </script>
  47. ");
  48. }
  49. else{
  50. exit("
  51. <script>
  52. alert('用户名或者密码错误');
  53. location.href='login.php';
  54. </script>
  55. ");
  56. }
  57. ?>

首页代码index.php代码如下

  1. <?php
  2. header('content-type:text/html;charset=utf-8');
  3. require('datebase.php');
  4. try{
  5. $pdo=new pdo(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING,]);
  6. }
  7. //捕捉特定于数据库信息的PDOException异常
  8. catch(PDOException $e){
  9. echo $e->getMessage();
  10. }
  11. //捕捉拥有Throwable接口的错误或者其它异常
  12. catch(Throwable $e){
  13. echo $e->getMessage();
  14. }
  15. //从Cookie中取出auth
  16. $auth=$_COOKIE['auth'];
  17. $res=explode(',',$auth);
  18. $id=end($res) ;
  19. $auth_rel=$res[0];
  20. $sql="SELECT `username`,`password`,`id` FROM `yizhi_user` WHERE `id`=?";
  21. $stmt=$pdo->prepare($sql);
  22. $stmt->bindParam(1,$id);
  23. $stmt->execute();
  24. $res=$stmt->fetch(PDO::FETCH_ASSOC);
  25. if($stmt->rowCount()==1){
  26. $username=$res['username'];
  27. $password=$res['password'];
  28. $salt="yizhi";
  29. $auth=md5($username.$password.$salt);
  30. if($auth!==$auth_rel){
  31. exit("
  32. <script>
  33. alert('请重新登陆');
  34. location.href='login.php';
  35. </script>
  36. ");
  37. }
  38. }
  39. else{
  40. exit("
  41. <script>
  42. alert('请重新登陆');
  43. location.href='login.php';
  44. </script>
  45. ");
  46. }
  47. ?>
  48. 欢迎你,<?php echo $_COOKIE['username']?>登陆成功。<br>
  49. <a href="login.php?action=logout">退出登陆</a>

问老师三个问题

问题1.

  • empty 如果 变量的值是空或零,则 empty() 返回 true,非空和非零返回False。empty() 5.5 版本之后支持表达式了,而不仅仅是变量
  • is_null 检测【值,变量,表达式】是否是空,如果为空返回TRue。
  • isset 判断一个变量是否被设置(声明).
    上面在从网上搜索得到的结论。
    问题:Empty和is_null都是判断是否为空,有啥区别?

问题2.

  • 如果要判断一个变量是否被设置(声明),使用isset
  • 如果要判断一个变量赋值并且不为空,使用empty
  • 如果要判断一个变量被设置并且不为空,可以先使用isset,然后使用empty

    问题:上面的说法,是否正确?


问题3

问题:if($a) 相当于那个函数的功能?


麻烦老师依次回答这三个问题,非常感谢!

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:你好, 请将问题发到群中更好
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学