在 PHP 开发中,Cookie
和 Session
是两种常用的机制,用于在客户端和服务器之间存储用户信息。本文将通过一个简单的登录示例,详细介绍如何在 PHP 中使用 Cookie
和 Session
。
示例项目结构
我们的项目包含三个文件:
login.html
- 登录表单页面login.php
- 处理登录逻辑的 PHP 文件login1.php
- 使用 Session 处理登录逻辑的 PHP 文件
项目里可能用到的资源文件见资源 (本人下载居然要收费?
那算了,还是见百度网盘吧
通过网盘分享的文件:login.zip
项目资源文件
–来自百度网盘超级会员v4的分享
1. 登录表单页面 (login.html
)
首先,我们创建一个简单的 HTML 表单,用于收集用户的用户名和密码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登入页面</title>
<link rel="stylesheet" href="login.css">
</head>
<body>
<div class="loginCard">
<div class="image">
<img src="earth.png" alt="error logo">
</div>
<div class="f">
<form action="login.php" method="post">
<label for="1">昵称:</label>
<input type="text" name="username" id="1" placeholder="请输入您的用户名" >
<br>
<br>
<label for="2">密码:</label>
<input type="password" name="pw" id="2" placeholder="请输入您的密码" >
<br>
<div class="bt">
<button type="submit" >提交</button>
</div>
</form>
</div>
</div>
</body>
</html>
2. 使用 Cookie 处理登录逻辑 (login.php
)
接下来,我们编写 login.php
文件,使用 Cookie
来记录用户的登录状态。
<?php
// 启动会话
session_start();
$username = $_POST['username'];
$password = $_POST['pw'];
// 输出用户输入的用户名和密码
echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
// 检查是否已经通过 Cookie 登录
if (isset($_COOKIE['user01'])) {
echo '<h1>尊敬的' . htmlspecialchars($_COOKIE['user01']) . ',您已经登录过了!</h1>';
exit();
} else {
// 定义用户名和密码的正则表达式
$user_head = '/^[a-zA-Z][a-zA-Z0-9_]{5,9}$/';
$pw_head = '/^.{6,10}$/';
// 验证用户名和密码格式
if (!preg_match($user_head, $username) || !preg_match($pw_head, $password)) {
echo "格式不正确,请重新输入。";
exit();
} else {
// 设置 Cookie 记录用户登录状态
setcookie('user01', $username, time() + 60);
echo '<h1>尊敬的' . htmlspecialchars($username) . ',您已经成功登录!</h1>';
}
}
?>
解释
-
获取用户输入:
$username = $_POST['username']; $password = $_POST['pw'];
从 POST 请求中获取用户名和密码。
-
输出用户输入:
echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
输出用户输入的用户名和密码,并使用
htmlspecialchars
函数防止 XSS 攻击。 -
检查 Cookie:
if (isset($_COOKIE['user01'])) { echo '<h1>尊敬的' . htmlspecialchars($_COOKIE['user01']) . ',您已经登录过了!</h1>'; exit(); }
检查是否存在名为
user01
的 Cookie,如果存在,则表示用户已经登录过。 -
验证用户名和密码格式:
$user_head = '/^[a-zA-Z][a-zA-Z0-9_]{5,9}$/'; $pw_head = '/^.{6,10}$/'; if (!preg_match($user_head, $username) || !preg_match($pw_head, $password)) { echo "格式不正确,请重新输入。"; exit(); }
使用正则表达式验证用户名和密码的格式。
-
设置 Cookie:
setcookie('user01', $username, time() + 60); echo '<h1>尊敬的' . htmlspecialchars($username) . ',您已经成功登录!</h1>';
如果用户名和密码格式正确,设置一个名为
user01
的 Cookie,有效期为 60 秒,并显示成功登录信息。
3. 使用 Session 处理登录逻辑 (login1.php
)
最后,我们编写 login1.php
文件,使用 Session
来记录用户的登录状态。
<?php
// 启动会话
session_start();
$username = $_POST['username'];
$password = $_POST['pw'];
// 输出用户输入的用户名和密码
echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
// 检查是否已经通过 Session 登录
if (isset($_SESSION['user01'])) {
echo '<h1>尊敬的' . htmlspecialchars($_SESSION['user01']) . ',您已经登录过了!</h1>';
exit();
} else {
// 定义用户名和密码的正则表达式
$user_head = '/^[a-zA-Z][a-zA-Z0-9_]{5,9}$/';
$pw_head = '/^.{6,10}$/';
// 验证用户名和密码格式
if (!preg_match($user_head, $username) || !preg_match($pw_head, $password)) {
echo "格式不正确,请重新输入。";
exit();
} else {
// 设置 Session 记录用户登录状态
$_SESSION['user01'] = $username;
echo '<h1>尊敬的' . htmlspecialchars($username) . ',您已经成功登录!</h1>';
}
}
?>
解释
-
启动会话:
session_start();
启动会话,以便在不同页面之间共享用户信息。
-
获取用户输入:
$username = $_POST['username']; $password = $_POST['pw'];
从 POST 请求中获取用户名和密码。
-
输出用户输入:
echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
输出用户输入的用户名和密码,并使用
htmlspecialchars
函数防止 XSS 攻击。 -
检查 Session:
if (isset($_SESSION['user01'])) { echo '<h1>尊敬的' . htmlspecialchars($_SESSION['user01']) . ',您已经登录过了!</h1>'; exit(); }
检查是否存在名为
user01
的 Session 变量,如果存在,则表示用户已经登录过。 -
验证用户名和密码格式:
$user_head = '/^[a-zA-Z][a-zA-Z0-9_]{5,9}$/'; $pw_head = '/^.{6,10}$/'; if (!preg_match($user_head, $username) || !preg_match($pw_head, $password)) { echo "格式不正确,请重新输入。"; exit(); }
使用正则表达式验证用户名和密码的格式。
-
设置 Session:
$_SESSION['user01'] = $username; echo '<h1>尊敬的' . htmlspecialchars($username) . ',您已经成功登录!</h1>';
如果用户名和密码格式正确,设置一个名为
user01
的 Session 变量,并显示成功登录信息。
总结
通过上面的两个例子,我们可以看到 Cookie
和 Session
在 PHP 中的不同用途和使用方法:
-
Cookie:
- 存储在客户端,可以设置过期时间。
- 适合存储少量、非敏感的数据。
- 不适合存储敏感信息,因为用户可以轻易修改 Cookie。
-
Session:
- 存储在服务器端,安全性更高。
- 适合存储大量、敏感的数据。
- 用户无法直接修改 Session 数据。
因此,在实际开发中,推荐使用 Session
来管理用户的登录状态,以提高安全性。