作业1:cookie实现用户登录与验证
代码1:实现功能:登录页面,判断用户是否登录
实例
<?php $page_title = '首页'; include 'inc/header.php'; echo '<h2>首页第一打开网站的界面</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';
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码2:实现功能:登录成功界面
实例
<?php /** 登录成功跳转的页面 */ //判断用户是否登录 if (!isset($_COOKIE['id'])){ require 'inc/function.php'; redirect_user();//未登录调整到默认连接:index } $page_title = '登录成功界面'; include 'inc/header.php'; echo <<< EOT <h2>登录成功</h2> <p>欢迎:{$_COOKIE['name']}</p> <p> <a href="logout.php">退出</a> </p> EOT; include 'inc/function.php';
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码3:实现功能:验证登录信息
实例
<?php //检测用户提交的类型 if ($_SERVER['REQUEST_METHOD'] == 'POST'){ require 'inc/function.php';//导入验证函数 require 'inc/connect.php';//导入数据库连接 //check_login($dbc,'admin@php.cn','1234'); //验证登录 list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']); //list 绑定返回的信息,check是布尔值,$data 是个数组 if ($check){ setcookie('id',$data['id']); setcookie('name',$data['name']); //登录成功,跳转 redirect_user('loggedin.php'); }else{ $errors = $data; } mysqli_close($dbc); } include 'login_page.php';
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码4:实现功能:欢迎登录界面,获取用户输入的表单信息
实例
<?php // 这是剥离的登录页面,为了更好的调用 $page_title='欢迎登陆'; include "inc/header.php"; //如果出错,输出错误信息 if (isset($errors) && !empty($errors)) { $errors_msg = '<p>'; foreach ($errors as $msg) { $errors_msg .= $msg .'<br>'; //拼接错误信息。 } echo $errors_msg .'</p>'; } ?> <h2>用户登录界面</h2> <form action="login.php" method="post"> <p> <label for="email">邮箱:</label> <input type="email" name="email" id="email" value=" <?php echo isset($_POST['email'])?$_POST['email']:''; //粘性表单; ?> "> </p> <p> <label for="password">密码:</label> <input type="password" name="password" id="password" value="<?php echo isset($_POST['password'])?$_POST['password']:''; ?> "> </p> <p> <button type="submit" name="submit" id="submit">登录</button> </p> </form> <?php include "inc/footer.php"; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码5:处理登出信息 的界面
实例
<?php /** 实现功能:退出界面 */ //判断用户是否登录 if (!isset($_COOKIE['id'])){ require 'inc/function.php'; redirect_user();//未登录调整到默认连接:index } else{ //已登录,删除cookie时间 setcookie('id',time()-1200); setcookie('name',time()-1200); } $page_title = '已退出'; include 'inc/header.php'; echo <<< EOT <h2>退出成功</h2> <p> <a href="login.php">登录</a> </p> EOT; include 'inc/function.php';
运行实例 »
点击 "运行实例" 按钮查看在线实例
以下代码是包含的公共部分
代码6:实现数据的连接
实例
<?php /** 用来连接数据库 利用的是mysqli_connect();方法 */ $dbc = mysqli_connect('localhost','root','root','stu'); if (mysqli_connect_errno()){ die('连接数据库出错了!'.mysqli_connect_error()); //打印出错信息; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码7:公共的HTML页面--导航条
实例
<!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($page_title) ? $page_title :'随便了'; ?> </title> </head> <body> <h1>头部导航栏</h1>
运行实例 »
点击 "运行实例" 按钮查看在线实例
代码8:公共的HTML页面--尾部
代码9:公共函数:用户实现用户验证,获得结果集,及成功后跳转
实例
<?php /** 公共函数部分 */ // 用于验证的函数 function check_login($dbc, $email='',$password){ //搞个数组,收集错误信息 $errors = []; //邮箱不能为空 if (empty($email)){ //如果忘填写邮箱了,执行 $errors[]= '请填写邮箱'; }else{ //如果填写了邮箱,执行 $e = mysqli_real_escape_string($dbc,trim($email)); //对特殊字符转义,取出多余空格,两边的 } //登录密码不能为空 if (empty($password)){ //如果忘填写密码了,执行 $errors[]= '请输入密码!'; }else{ //如果填写了密码,执行 $p = mysqli_real_escape_string($dbc,trim($password)); } //拉取数据库数据,和post传入的参数对比是否有误 if (empty($errors)) { //如果errors为空,则说明登录信息有了,执行验证 //执行SQL语句获取数据库中的邮箱和密码进行对比 $sql = "select `id`,`name` from `user` where `email`='$e' and `password` = '$p';"; //die($sql); //用mysqli_query()查询sql语句 $res = mysqli_query($dbc, $sql); //var_dump($res);die; // echo mysqli_num_rows($res);die; if (mysqli_num_rows($res) == 1){ $row = mysqli_fetch_array($res,MYSQLI_ASSOC); return[true,$row]; }else{ $errors[] = '邮箱或密码输入有误,请重新输入!'; } return [false,$errors]; } } //登录成功后的跳转 function redirect_user ($page = 'index.php'){ $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); //拼接一个地址 $url = rtrim($url,'/\\'); $url .= '/'.$page; //拼接一个完整的URL地址 http://xxx.xxx.php header('location:'.$url); //跳转到指定位置: exit(); }
运行实例 »
点击 "运行实例" 按钮查看在线实例
作业3:cookie和session的优缺点
cookie为浏览器内置,方便使用,且占用资源小,一般一个cookie 4Kb;cookie 是不可执行文件,不会引起病*毒攻击
cookie在客*户端,减轻了服务端的压力,但是,cookie会被用户禁用,那么基于cookie的应用就失效了。
session 方式是用户在会话期间的私有信息存储在服务器上,使session中定义的变量和对象可以在页面共享
但又不能被其他程序访问,安全性较高。随着会话的增多,session占用服务器资源,而且,一旦服务器被攻破,可以拿到session中的用户信息,也是比较危险的。