PHP中的授权与认证:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中的授权与认证:如何保护您的网站



安全性是任何Web应用程序的关键方面之一。在PHP中,认证(验证用户身份)和授权(确定其访问权限)通过内置工具实现:会话、Cookie、密码哈希以及数据库操作。在本文中,我们将详细讲解使用PHP创建登录、注册和访问控制系统的完整流程。



1. 基本概念



  • 认证 — 验证用户是否为其所声称的身份的过程(通常通过用户名和密码)。
  • 授权 — 检查已认证用户是否有权执行特定操作(例如,访问管理面板)。
  • 会话 — 服务器上的临时数据存储,通过唯一标识符(session ID)与特定访客关联。
  • 密码哈希 — 将密码转换为不可逆字符串,以便安全地存储在数据库中。


2. 用户注册



第一步是创建注册表单和处理程序。密码绝不能以明文形式存储——使用 password_hash() 函数。



2.1. 注册表单 (register.php)



<form method="post" action="register_handler.php">    <input type="text" name="username" placeholder="用户名" required>    <input type="email" name="email" placeholder="邮箱" required>    <input type="password" name="password" placeholder="密码" required>    <button type="submit">注册</button></form>


2.2. 注册处理程序 (register_handler.php)



<?php// 连接数据库 (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$username = $_POST['username'];$email = $_POST['email'];$password = password_hash($_POST['password'], PASSWORD_BCRYPT); // 进行哈希处理

$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->execute([$username, $email, $password]);

header('Location: login.php');?>


使用 PASSWORD_BCRYPT — 它会自动生成盐值,并且被认为足够安全。



3. 认证(登录系统)



登录时,我们使用 password_verify() 将输入的密码与数据库中的哈希值进行比对,并创建会话。



3.1. 登录表单 (login.php)



<form method="post" action="login_handler.php">    <input type="text" name="username" placeholder="用户名" required>    <input type="password" name="password" placeholder="密码" required>    <button type="submit">登录</button></form>


3.2. 登录处理程序 (login_handler.php)



<?phpsession_start();$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');

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

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();

if ($user && password_verify($password, $user['password'])) { // 认证成功 $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // 用于授权 header('Location: dashboard.php');} else { echo "用户名或密码错误";}?>


4. 授权(访问控制)



认证后,用户会获得一个角色(例如,'user'、'admin'、'moderator')。授权在执行操作前检查该角色。



4.1. 简单的角色检查



<?phpsession_start();

// 检查用户是否已认证

推荐