首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP + MySQL 使用者認證系統實作教學

     編輯:MySQL 資料庫相關知識

系統架構概覽

本文示範一個基於 PHP 與 MySQL 的基本使用者認證系統,包含註冊、登入、Session/Cookie 狀態維持三大核心功能。適合初學者理解 Web 認證基本原理。

資料庫設計

CREATE DATABASE userinfo;
USE userinfo;
CREATE TABLE usertbl (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(30) NOT NULL UNIQUE,
    Password VARCHAR(20) NOT NULL,
    LastLogin DATETIME
);

核心模組實作

1. 登入驗證

<?php
// login.php
$conn = mysqli_connect("localhost", "user", "password", "userinfo")
    or die("無法連接資料庫");

$name = mysqli_real_escape_string($conn, $_POST['name']);
$pass = mysqli_real_escape_string($conn, $_POST['password']);

$sql = "SELECT id FROM usertbl WHERE Name='$name' AND Password='$pass'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) == 0) {
    echo "非法使用者,請先註冊";
} else {
    $row = mysqli_fetch_assoc($result);
    $id = $row['id'];
    // 更新最後登入時間
    mysqli_query($conn, "UPDATE usertbl SET LastLogin=NOW() WHERE id=$id");
    // 建立 Session
    session_start();
    $_SESSION['user_id'] = $id;
    $_SESSION['username'] = $name;
    echo "登入成功,歡迎 $name!";
}
?>

2. 使用者註冊

<?php
// register.php
$conn = mysqli_connect("localhost", "user", "password", "userinfo")
    or die("無法連接資料庫");

$name = mysqli_real_escape_string($conn, $_POST['name']);
$pass = mysqli_real_escape_string($conn, $_POST['password']);

// 檢查帳號是否存在
$check = mysqli_query($conn, "SELECT id FROM usertbl WHERE Name='$name'");
if (mysqli_num_rows($check) > 0) {
    echo "帳號已存在,請換個名稱";
} else {
    // 密碼加密儲存(生產環境請用 password_hash)
    $hash = password_hash($pass, PASSWORD_DEFAULT);
    $sql = "INSERT INTO usertbl (Name, Password) VALUES ('$name', '$hash')";
    mysqli_query($conn, $sql);
    echo "註冊成功,請登入!";
}
?>

3. 狀態維持與頁面保護

<?php
// auth_check.php - 放在每個需登入頁面頂端
session_start();
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}
// 可取得 $_SESSION['username'] 顯示歡迎訊息
?>

安全性強化重點(生產環境必做)

風險對策
SQL 注入使用預備語句或 mysqli_real_escape_string
明文密碼使用 password_hash() / password_verify()
Session 劫持啟用 session.cookie_httponly、session.use_strict_mode、HTTPS
暴力破解登入失敗計數、驗證碼、帳號鎖定機制
CSRF表單加入 CSRF Token 驗證

進階擴充方向

  • 角色權限控管(RBAC)
  • OAuth 2.0 / OpenID Connect 整合第三方登入
  • 雙因子認證(2FA)
  • JWT 無狀態認證適用 API 服務

這個簡易系統展示了認證核心邏輯,實際專案中請務必套用上述安全強化措施,並考慮使用成熟框架(如 Laravel、Symfony)內建的認證元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved