批改状态:未批改
老师批语:
一、cookie:
在网站中,http请求是无状态的。即第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

入口文件index.php
<?php
$page_title = '我是首页';
//导入页面的公共头部
include 'public/header.php';
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 'public/footer.php';点击 "运行实例" 按钮查看在线实例
跳转到登入文件login.php(判断)+login_page.php(登入表单)+function.php(验证表单数据)
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//加载函数库
require 'public/function.php';
//连接数据库
require 'public/connect.php';
//验证登录
list($check, $data) = check_login($dbc,$_POST['email'],$_POST['password']);
//检测是否验证通过
if ($check) {
//设置cookie
setcookie('id',$data['id']);
setcookie('name',$data['name']);
//跳转
redirect_user('loggedin.php');
} else {
$errors = $data;
}
//关闭
mysqli_close($dbc);
}
include 'login_page.php';点击 "运行实例" 按钮查看在线实例
<?php
//登录成功页面
//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
require 'public/function.php';
redirect_user();
}
$page_title = '登录成功';
//导入页面的公共头部
include 'public/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_COOKIE['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'public/footer.php';点击 "运行实例" 按钮查看在线实例
<?php
/**
* 公共函数库
*/
//用户登录成功之后的跳转
function redirect_user($page='index.php')
{
//默认的url
$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
//如果有,去掉url右侧的斜线
$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($password)) {
$errors[] = '密码不能为空';
} else {
$p = mysqli_real_escape_string($dbc,trim($password));
}
//到表中进行数据验证
if (empty($errors)) {
// 根据邮箱和密码进行验证,并返回id, name
$sql = "SELECT `id`,`name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p')";
//执行查询
$res = mysqli_query($dbc, $sql);
if (mysqli_num_rows($res) == 1) {
$row = mysqli_fetch_array($res, MYSQLI_ASSOC);
//返回查询结果
return [true, $row];
} else {
$errors[] = '邮箱或密码不正确,请重新输入';
}
return [false, $errors];
}
}点击 "运行实例" 按钮查看在线实例
登入成功显示内容文件loggedin.php
<?php
//登录成功页面
//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
require 'public/function.php';
redirect_user();
}
$page_title = '登录成功';
//导入页面的公共头部
include 'public/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">登录成功</h2>
<p>欢迎您: 亲爱的 {$_COOKIE['name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'public/footer.php';点击 "运行实例" 按钮查看在线实例
退出登入操作
<?php
//退出登录页面
//判断用户是否登录?
if (!isset($_COOKIE['id'])) {
require 'public/function.php';
redirect_user();
} else {
//退出登录,删除cookie
setcookie('id','',time()-3600);
setcookie('name','',time()-3600);
}
$page_title = '退出登录';
//导入页面的公共头部
include 'public/header.php';
//heredoc
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
//导入页面的公共底部
include 'public/footer.php';点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号