作业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中的用户信息,也是比较危险的。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号