1. 会话控制
- HTTP 是基于无连接的网络协议, 每一次访问, 对于服务器来说, 都是全新的
- 如果记住访问者,以及记录连接状态, 可以提升用户体验,完成许多个性化的功能
- 例如, 用户登录, 购物车等
- 其实让服务器记住用户的方式很简单, 就和生活中, 我们办会员卡是一样的
- 会员卡的存储位置有二个地方, 要么放在你身上, 要么保存到商家电脑中
- 所以, 网络中的用户资料也会保存在二个地方: 浏览器(客户端)和服务器中
- 保存到浏览器中的叫:
cookie
- 保存到服务器中的叫:
session
2. COOKIE
- 保存在客户端
- 变量:
$_COOKIE
- 变量过滤器:
filter_input(INPUT_COOKIE, key)
- 设置使用专用函数:
setcookie(名称, 值, 过期时间)
- 生效需要分二步完成: 先下达指令到浏览器, 再由浏览器完成 cookie 写入
3. SESSION
- 保存在服务器端
- 变量:
$_SESSION
- 变量过滤器:
filter_input(INPUT_SESSION, key)
- 设置使用专用函数:
setcookie(名称, 值, 过期时间)
- 生效需要分二步完成: 先下达指令到浏览器, 再由浏览器完成 cookie 写入
4.首页代码:
<?php
// 判断是否已经登录?
if (isset($_COOKIE['user'])) $user = unserialize($_COOKIE['user']);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="/php/0508/css/index.css">
<title>首页</title>
</head>
<body>
<nav>
<a href="">网站首页</a>
<a href="">电视剧</a>
<a href="">最新电影</a>
<a href="">教育频道</a>
<?php if (isset($user)) : ?>
<a href="" id="logout"><span style="color:red"><?php echo $user['name']?></span> 退出</a>
<?php else: ?>
<a href="login.php">登录</a>
<?php endif ?>
</nav>
</body>
<script>
// 为退出按钮创建事件监听器
document.querySelector('#logout').addEventListener('click', function(event) {
if (confirm('是否退出')) {
// 禁用默认行为, 其实就是禁用原<a>标签的点击跳转行为,使用事件中的自定义方法处理
event.preventDefault();
// 跳转到退出事件处理器
window.location.assign('handle.php?action=logout');
}
});
</script>
</html>
4.1首页演练图:
5.登录页面代码:
<?php
// 判断是否已登录
if (isset($_COOKIE['user']))
exit('<script>alert("请不要重复登录");location.href="index.php";</script>');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="/php/0508/css/style.css">
<title>用户登录</title>
</head>
<body>
<!-- 只需要验证用户的邮箱和密码就可以 -->
<h3>用户登录</h3>
<form action="handle.php?action=login" method="post">
<div>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" placeholder="demo@email.com" require autofocus>
</div>
<div>
<label for="password">密码:</label>
<input type="password" name="password" id="password" placeholder="不少于6位" required>
</div>
<div>
<button>提交</button>
</div>
</form>
<a href="register.php">还没有帐号, 注册一个吧</a>
</body>
</html>
5.1登录界面演练图:
6.注册页面代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="/php/0508/css/style.css">
<title>注册</title>
</head>
<body>
<h3>用户注册</h3>
<form action="handle.php?action=register" method="post" onsubmit="return compare()">
<div>
<label for="name">用户名:</label>
<input type="text" name="name" id="name" placeholder="不少于3个字符" required autofocus>
</div>
<div>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" placeholder="demo@email.com" required>
</div>
<div>
<label for="p1">密码:</label>
<input type="password" name="p1" id="p1" placeholder="不少于6位" required>
</div>
<div>
<label for="p2">重复密码:</label>
<input type="password" name="p2" id="p2" placeholder="必须与上面一致" required>
</div>
<div>
<button>提交</button><span id="tips" style="color: red"></span>
</div>
</form>
<a href="login.php">我有帐号,直接登录</a>
<script>
// 验证二次密码是否相等?
function compare() {
if (document.forms[0].p1.value.trim() !== document.forms[0].p2.value.trim()) {
document.querySelector('#tips').innerText = '二次密码不相等';
return false;
}
}
</script>
</body>
</html>
6.1注册页面演练图:
7.登录成功页面演练图:
学习总结:
通过这个实战发现,自己对PHP基本知识不够熟练,写起来非常痛苦,基本靠老师的教程,大致的逻辑能理解,但是要写起来就不知道从何开始了。。。。