流程:
1、公共代码分离(html头部和尾部)
2、登陆表单代码使用login_page.php,分离
3、使用login.php文件来判断用户登陆,并加载数据库,公共函数库
4、最后写入登陆成功和退出页面
index.php文件:
实例
<?php // 导入公共头部文件 include 'inc/header.php'; // 在公共头部判断是否有$title_page值,有就为自定义的值 $title_page = '我是首页'; // 判断当前的cookie是否有id字段,和当前页面不等于退出页面 echo '<h2 style="color:red">我是首页</h2>'; if(isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php'){ echo '<a href="logout.php">退出</a>'; }else { echo '<a href="login.php">登录</a>'; } // 导入公共底部文件 include 'inc/footer.php';
运行实例 »
点击 "运行实例" 按钮查看在线实例
登陆表单页面login_page.php:
实例
<?php // 设置自定义的 title值 $title_page = '用户登陆'; // 导入公共头部文件 include "inc/header.php"; // 错误信息提示 if(isset($errors) && !empty($errors)){ $errors_msg = '<p style="color:blue">'; foreach ($errors as $msg){ $errors_msg .= $msg.'<br>'; } echo $errors_msg.'</p>'; } ?> <h2 style="color:red">用户登陆</h2> <form action="login.php" method="post"> <p> <table for="email">邮箱:</table> <input type="email" name="email" id="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : '' ?> "> </p> <p> <table for="password">密码:</table> <input type="password" name="password" id="password" value="<?php echo isset($_POST['password']) ? $_POST['password'] : '' ?>"> </p> <p> <button type="submit">登陆</button> </p> </form> <!-- 导入公共底部文件 --> <?php include "inc/footer.php"; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
login.php文件:
实例
<?php if($_SERVER['REQUEST_METHOD'] =='POST'){ // 加载函数 require 'inc/function.php'; // 加载数据库 require 'inc/connect.php'; // 验证判断 list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']); // 检测,如果通过就设置cookie if($check){ setcookie('id',$data['id']); setcookie('name',$data['name']); redirect_user('loggedin.php'); }else{ $errors = $data; } // 关闭数据库 mysqli_close($dbc); } // 导入登陆表单 include "login_page.php";
运行实例 »
点击 "运行实例" 按钮查看在线实例
函数库function.php:
实例
<?php // 用户登陆成功默认跳转函数库 function redirect_user($page = 'index.php'){ // 默认的url地址 $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); // 统一为 / $url = rtrim($url,'/\\'); $url .= '/'.$page; header('Location:' .$url); exit(); } // 验证函数库 function check_login($dbc,$email,$password){ // 初始化错误信息 $errors=[]; // 邮箱判断 if(empty($email)){ $errors [] = '邮箱不能为空'; }else{ $e = mysqli_real_escape_string($dbc,trim($email)); } // 密码判断 if(empty($email)){ $errors [] = '密码不能为空'; }else{ $p = mysqli_real_escape_string($dbc,trim($password)); } // 如果为空就到数据表中进行验证 if(empty($errors)){ // 根据数据库表中的email password ,并返回id name $sql = "SELECT `id`,`name` FROM `lianxi` WHERE `email`='$e' AND `password`='$p'"; // mysql_query(链接数据库,数据库语句) 函数执行一条 MySQL 查询 $res = mysqli_query($dbc,$sql); // mysqli_num_rows()返回结果集中行的数量: if(mysqli_num_rows($res) == 1){ // mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 //返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。 $row = mysqli_fetch_array($res,MYSQLI_ASSOC); // 如果成功就返回 true $row return [true , $row]; }else{ $errors[] = '邮箱密码不正确,请从新输入'; } return[false,$errors]; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
数据库connect.php:
实例
<?php // 连接数据库 $dbc = mysqli_connect('127.0.0.1','root','root','php'); // 判断是否连接失败 if(mysqli_connect_errno()){ die('连接失败'.mysqli_connect_error()); }
运行实例 »
点击 "运行实例" 按钮查看在线实例
登陆成功页面loggedin.php:
实例
<?php // 登陆成功 if(!isset($_COOKIE['id'])){ require 'inc/function.php'; redirect_user(); } $page_title = '登陆成功'; include "inc/header.php"; echo <<< "HEREDOC" <h2 style="color:red">登陆成功</h2> <p>欢迎你:{$_COOKIE['name']}</p> <p><a href="logout.php">退出</a></p> HEREDOC; include "inc/footer.php";
运行实例 »
点击 "运行实例" 按钮查看在线实例
退出页面logout.php:
实例
<?php if(!isset($_COOKIE['id'])){ require 'inc/function.php'; redirect_user(); }else{ setcookie('id','',time()-3600); setcookie('name','',time()-3600); } $page_title = '退出'; include "inc/header.php"; echo <<< "HEREDOC" <h2 style="color:red">退出成功</h2> <p><a href="login.php">登陆</a></p> HEREDOC; include "inc/footer.php";
运行实例 »
点击 "运行实例" 按钮查看在线实例
公共头部header页面:
实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title><?php echo isset($title_page) ? $title_page : '默认页面'; ?></title> </head> <body> <h2>我是公共头部</h2>
运行实例 »
点击 "运行实例" 按钮查看在线实例
公共底部footer页面:
使用session验证登陆:
只要在有cookie的地方开启session_start(); 会话模式,并替换cookie
在cookie验证登陆页面有:
index.php
实例
<?php session_start(); // 导入公共头部文件 include 'inc/header.php'; // 在公共头部判断是否有$title_page值,有就为自定义的值 $title_page = '我是首页'; // 判断当前的cookie是否有id字段,和当前页面不等于退出页面 echo '<h2 style="color:red">我是首页</h2>'; if(isset($_SESSION['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php'){ echo '<a href="logout.php">退出</a>'; }else { echo '<a href="login.php">登录</a>'; } // 导入公共底部文件 include 'inc/footer.php';
运行实例 »
点击 "运行实例" 按钮查看在线实例
login.php:
实例
<?php if($_SERVER['REQUEST_METHOD'] =='POST'){ // 加载函数 require 'inc/function.php'; // 加载数据库 require 'inc/connect.php'; // 验证判断 list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']); // 检测,如果通过就设置cookie if($check){ $_SESSION('id',$data['id']); $_SESSION('name',$data['name']); redirect_user('loggedin.php'); }else{ $errors = $data; } // 关闭数据库 mysqli_close($dbc); } // 导入登陆表单 include "login_page.php";
运行实例 »
点击 "运行实例" 按钮查看在线实例
logout.php:
实例
<?php if(!isset($_COOKIE['id'])){ require 'inc/function.php'; redirect_user(); }else{ session_destroy(); //服务器上的session信息消除 setcookie('PHPSESSID','',time()-3600); } $page_title = '退出'; include "inc/header.php"; echo <<< "HEREDOC" <h2 style="color:red">退出成功</h2> <p><a href="login.php">登陆</a></p> HEREDOC; include "inc/footer.php";
运行实例 »
点击 "运行实例" 按钮查看在线实例
除了这些代码,其他的代码跟cookie代码保持不变
cookie与session会话机制的优缺点分析:
1、session会把用户信息保存在服务器端。而cookie会把用户信息保持在浏览器端,下次用户不用再次输入账号与密码。
2、相对来说,个人觉得session保持在服务器端比较安全点!