PHP 中 Cookie 和 Session 的使用简易教程(学习笔记)

在 PHP 开发中,CookieSession 是两种常用的机制,用于在客户端和服务器之间存储用户信息。本文将通过一个简单的登录示例,详细介绍如何在 PHP 中使用 CookieSession

示例项目结构

我们的项目包含三个文件:

  1. login.html - 登录表单页面
  2. login.php - 处理登录逻辑的 PHP 文件
  3. 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>';
    }
}
?>
解释
  1. 获取用户输入:

    $username = $_POST['username'];
    $password = $_POST['pw'];
    

    从 POST 请求中获取用户名和密码。

  2. 输出用户输入:

    echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
    

    输出用户输入的用户名和密码,并使用 htmlspecialchars 函数防止 XSS 攻击。

  3. 检查 Cookie:

    if (isset($_COOKIE['user01'])) {
        echo '<h1>尊敬的' . htmlspecialchars($_COOKIE['user01']) . ',您已经登录过了!</h1>';
        exit();
    }
    

    检查是否存在名为 user01 的 Cookie,如果存在,则表示用户已经登录过。

  4. 验证用户名和密码格式:

    $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();
    }
    

    使用正则表达式验证用户名和密码的格式。

  5. 设置 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>';
    }
}
?>
解释
  1. 启动会话:

    session_start();
    

    启动会话,以便在不同页面之间共享用户信息。

  2. 获取用户输入:

    $username = $_POST['username'];
    $password = $_POST['pw'];
    

    从 POST 请求中获取用户名和密码。

  3. 输出用户输入:

    echo "您输入的用户名和密码是:" . htmlspecialchars($username) . " ," . htmlspecialchars($password) . '<br>';
    

    输出用户输入的用户名和密码,并使用 htmlspecialchars 函数防止 XSS 攻击。

  4. 检查 Session:

    if (isset($_SESSION['user01'])) {
        echo '<h1>尊敬的' . htmlspecialchars($_SESSION['user01']) . ',您已经登录过了!</h1>';
        exit();
    }
    

    检查是否存在名为 user01 的 Session 变量,如果存在,则表示用户已经登录过。

  5. 验证用户名和密码格式:

    $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();
    }
    

    使用正则表达式验证用户名和密码的格式。

  6. 设置 Session:

    $_SESSION['user01'] = $username;
    echo '<h1>尊敬的' . htmlspecialchars($username) . ',您已经成功登录!</h1>';
    

    如果用户名和密码格式正确,设置一个名为 user01 的 Session 变量,并显示成功登录信息。

总结

通过上面的两个例子,我们可以看到 CookieSession 在 PHP 中的不同用途和使用方法:

  • Cookie:

    • 存储在客户端,可以设置过期时间。
    • 适合存储少量、非敏感的数据。
    • 不适合存储敏感信息,因为用户可以轻易修改 Cookie。
  • Session:

    • 存储在服务器端,安全性更高。
    • 适合存储大量、敏感的数据。
    • 用户无法直接修改 Session 数据。

因此,在实际开发中,推荐使用 Session 来管理用户的登录状态,以提高安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值