从零搭建一个 PHP 登录注册系统(含完整源码)

一、前言

在现代 Web 开发中,用户登录注册系统 几乎是每一个网站的基础功能。

无论是论坛、博客、商城还是后台管理系统,都离不开登录注册模块。

本篇文章将带你一步步使用 原生 PHP + MySQL 从零搭建一个完整的登录注册系统。

我们将实现以下功能:

✅ 用户注册

✅ 用户登录

✅ 登录验证与错误提示

✅ Session 保存登录状态

✅ 退出登录

✅ 基础安全防护(密码加密、SQL 注入防御)

二、开发环境与准备

工具

版本或说明

PHP

8.0+

MySQL

5.7+

Web 服务器

Apache 或 Nginx

开发工具

VS Code / PhpStorm / XAMPP / WAMP

如果你使用 XAMPP,只需启动 Apache 与 MySQL 服务,然后将项目放到:

复制代码

C:\xampp\htdocs\login_system\

通过浏览器访问:

复制代码

http://localhost/login_system/

三、数据库设计

我们需要一个用户表 users,存储用户名、邮箱、密码等信息。

SQL 建表语句

复制代码

CREATE DATABASE login_demo CHARACTER SET utf8mb4;

USE login_demo;

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(50) NOT NULL UNIQUE,

email VARCHAR(100) NOT NULL,

password VARCHAR(255) NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

四、项目结构目录

复制代码

login_system/

├─ db.php # 数据库连接

├─ register.php # 注册页面

├─ login.php # 登录页面

├─ welcome.php # 登录成功页面

├─ logout.php # 注销登录

└─ style.css # 页面样式

五、数据库连接文件(db.php)

复制代码

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "login_demo";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {

die("数据库连接失败: " . $conn->connect_error);

}

?>

六、用户注册页面(register.php)

复制代码

session_start();

include("db.php");

if ($_SERVER["REQUEST_METHOD"] == "POST") {

$username = trim($_POST["username"]);

$email = trim($_POST["email"]);

$password = password_hash($_POST["password"], PASSWORD_DEFAULT);

// 检查用户名是否重复

$check = $conn->prepare("SELECT id FROM users WHERE username = ?");

$check->bind_param("s", $username);

$check->execute();

$check->store_result();

if ($check->num_rows > 0) {

$error = "用户名已存在,请换一个!";

} else {

$stmt = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");

$stmt->bind_param("sss", $username, $email, $password);

if ($stmt->execute()) {

$_SESSION["username"] = $username;

header("Location: welcome.php");

} else {

$error = "注册失败,请重试!";

}

}

}

?>

用户注册

注册新账号

$error

"; ?>

用户名:

邮箱:

密码:

已有账号?去登录

七、用户登录页面(login.php)

复制代码

session_start();

include("db.php");

if ($_SERVER["REQUEST_METHOD"] == "POST") {

$username = trim($_POST["username"]);

$password = $_POST["password"];

$stmt = $conn->prepare("SELECT id, password FROM users WHERE username = ?");

$stmt->bind_param("s", $username);

$stmt->execute();

$stmt->store_result();

if ($stmt->num_rows > 0) {

$stmt->bind_result($id, $hashed_password);

$stmt->fetch();

if (password_verify($password, $hashed_password)) {

$_SESSION["username"] = $username;

header("Location: welcome.php");

exit;

} else {

$error = "密码错误,请重试。";

}

} else {

$error = "用户不存在。";

}

}

?>

用户登录

登录

$error

"; ?>

用户名:

密码:

没有账号?立即注册

八、欢迎页面(welcome.php)

复制代码

session_start();

if (!isset($_SESSION["username"])) {

header("Location: login.php");

exit;

}

?>

欢迎

欢迎你,

退出登录

九、退出登录页面(logout.php)

复制代码

session_start();

session_unset();

session_destroy();

header("Location: login.php");

exit;

?>

十、简单样式文件(style.css)

复制代码

body {

font-family: Arial, sans-serif;

background-color: #f8f8f8;

text-align: center;

margin-top: 100px;

}

form {

display: inline-block;

padding: 20px;

background: white;

border-radius: 10px;

box-shadow: 0 0 10px #ccc;

}

input {

display: block;

margin: 10px auto;

padding: 8px;

width: 200px;

}

button {

padding: 8px 16px;

background-color: #007BFF;

border: none;

color: white;

border-radius: 5px;

cursor: pointer;

}

.error {

color: red;

}

十一、安全优化建议

问题

解决方案

明文密码存储

使用 password_hash() + password_verify()

SQL 注入风险

使用 prepare() 预处理语句

XSS 攻击

输出使用 htmlspecialchars()

会话劫持

设置 session_regenerate_id()

HTTPS

部署时务必启用 HTTPS 加密传输

十二、总结

通过本篇文章,你已经掌握了:

✅ PHP 与 MySQL 的基本连接

✅ 用户注册与登录的完整逻辑

✅ 使用 Session 实现登录状态管理

✅ 密码加密与表单验证的安全措施

这只是一个基础版本,但已经能在任何小型网站中正常使用。

后续你可以进一步扩展:

添加邮箱验证

密码找回功能

用户角色权限(admin/user)

使用 Ajax 提升体验