登录验证的整个过程实现,利用cookie和session判断是否为登录状态。
login.php -> check.php -> admin.php -> logout -> login.php
学习了 isset()函数命令 可以判断变量值是否为空
登录页面
<?php //判断是否登陆,登陆了就直接跳转到后台页面 if (isset($_COOKIE['username'])){ echo "<script>alert('你已经登陆啦!直接进入后台!');location.href='admin.php'</script>"; } ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="check.php" method="post" onsubmit="return isEmpty();"> <p> <label for="email">邮箱:</label> <input type="email" name="email" id="email"> </p> <p> <label for="password">密码:</label> <input type="password" name="password" id="password"> </p> <p> <button>登陆</button> </p> </form> <script> function isEmpty() { let email = document.getElementById('email').value; let password = document.getElementById('password').value; // alert(email.length + '...' +password.length); if (email.length === 0 || password.length === 0){ alert('邮箱或密码不能为空!'); return false; } } </script> </body> </html>
点击 "运行实例" 按钮查看在线实例
检查也没check.php
<?php $email = $_POST['email']; $password = sha1($_POST['password']);//可以这样加密 sha1(md5($_POST['password'].'hello')) if (strlen($email) === 0 || strlen($password) === 0){ echo "<script>alert('非法登陆!');location.assign('login.php')</script>"; die; } //1.连接数据库 require_once 'inc/connection.php'; //2.配置SQL脚本 $sql = 'SELECT * FROM `user` WHERE `email` = :email AND `password` = :password LIMIT 1'; //3.预处理prepare $stmt = $pdo->prepare($sql); //4.绑定变量 执行sql //$email =''; //$password = ''; //$stmt->bindParam(':email',$email,PDO::PARAM_STR); //$stmt->bindParam(':password',$password,PDO::PARAM_STR_CHAR); //$Ob = $stmt->execute(); //另一种方法直接在执行的时候绑定变量,参数为数组方式 $Ob = $stmt->execute([':email'=>$email,':password'=>$password]); //获取数据库信息 $user = $stmt->fetch(PDO::FETCH_ASSOC);//查询到的话返回结果是真bool型 没找到证明账号密码不对 //print_r($user ? '找到了' : '没找到'); if (!($user)){ echo "<script>alert('账号或密码错误!');location.href='login.php';</script>"; die; } //账号密码正确的情况下 设置浏览器的cookie 并跳转到后台页面 setcookie('username',$user['username']); echo "<script>alert('登陆成功!');location.href='admin.php';</script>"; //Array //( // [userid] => 1 // [email] => admin@php.cn //[password] => 7c4a8d09ca3762af61e59520943dc26494f8941b //[username] => admin //) //关闭数据库连接 $pdo = null;
点击 "运行实例" 按钮查看在线实例
后台页面admin.php
<?php //判断是否登陆,登陆了才可以访问该页面 if (!(isset($_COOKIE['username']))){ echo "<script>alert('你还没有登陆,不允许访问该页面!');location.href='login.php'</script>"; } ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>后台首页</title> </head> <body> <h2>后台首页</h2> <?php echo $_COOKIE['username']; ?> <a href="logout.php">退出</a> </body> </html>
点击 "运行实例" 按钮查看在线实例
退出页面logout.php
<?php //先判断是否为登陆状态,如果为登陆状态才可以退出。否则提示你还没有登陆 if (isset($_COOKIE['username'])){ setcookie('username',null,time()-1); echo "<script>alert('已经成功退出!');location.href='login.php';</script>"; } else { // username的值等于空 意思就是没有username echo "<script>alert('你还没有登陆!');location.href='login.php';</script>"; }
点击 "运行实例" 按钮查看在线实例
session和cookie功能一样,改成session 只需要把每个位置的cookie替换成session,
然后在每个页面添加seesion_start()开启session会话。
在logout.php中 退出登录的地方设置 session_destroy();删除服务器的session文件