×

Cách viết class đăng nhập và đăng xuất với PHP và MySQL

Trong thế giới lập trình web, việc quản lý người dùng thông qua chức năng đăng nhập và đăng xuất là một yếu tố thiết yếu để bảo vệ thông tin cá nhân và dữ liệu. Việc triển khai một hệ thống đăng nhập và đăng xuất hiệu quả không chỉ tạo điều kiện thuận lợi cho người dùng mà còn đảm bảo an toàn cho ứng dụng. Trong bài viết này, chúng ta sẽ hướng dẫn bạn cách viết một lớp (class) đăng nhập và đăng xuất với PHP và MySQL. Qua đó, bạn sẽ nắm vững các khái niệm cơ bản về lập trình OOP trong PHP và cách tương tác với cơ sở dữ liệu MySQL.

Giới thiệu về hệ thống đăng nhập và đăng xuất

Hệ thống đăng nhập và đăng xuất là nền tảng của hầu hết các ứng dụng web hiện đại. Cho dù đó là một trang web thương mại điện tử hay một mạng xã hội, người dùng thường cần có một tài khoản để truy cập vào các tính năng cá nhân hóa. Hệ thống này bao gồm:

  1. Đăng ký: Người dùng tạo tài khoản bằng cách cung cấp thông tin như tên, email, mật khẩu, v.v.
  2. Đăng nhập: Người dùng xác thực thông tin tài khoản của họ để truy cập các chức năng của ứng dụng.
  3. Đăng xuất: Người dùng có thể rời khỏi tài khoản của mình một cách an toàn.
  4. Quản lý Session: Giữ thông tin phiên làm việc khi người dùng đăng nhập.

Chúng ta sẽ xây dựng một class PHP đơn giản để thực hiện các chức năng này, sử dụng MySQL để lưu trữ thông tin người dùng.

Chuẩn bị môi trường

Để bắt đầu, bạn cần có:

  • Máy chủ web hỗ trợ PHP (ví dụ: XAMPP, WAMP, MAMP).
  • Dịch vụ MySQL để lưu trữ dữ liệu.
  • Trình soạn thảo mã (như Visual Studio Code hoặc Sublime Text).

Cài đặt cơ sở dữ liệu

Trước tiên, bạn cần tạo một cơ sở dữ liệu và bảng để lưu thông tin người dùng:

CREATE DATABASE user_management;

USE user_management;

CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Thông qua câu lệnh SQL này, chúng ta đã tạo ra một cơ sở dữ liệu có tên user_management và một bảng users để lưu thông tin tài khoản.

Viết class PHP cho hệ thống đăng nhập và đăng xuất

Bây giờ chúng ta sẽ viết class PHP cho chức năng đăng nhập và đăng xuất.

Tạo class User

Dưới đây là đoạn mã PHP cho class User:

<?php
class User {
    private $conn;

    // Constructor
    public function __construct($db) {
        $this->conn = $db;
    }

    // Đăng ký người dùng
    public function register($username, $password) {
        $hashed_password = password_hash($password, PASSWORD_DEFAULT);
        $query = "INSERT INTO users (username, password) VALUES (?, ?)";

        if ($stmt = $this->conn->prepare($query)) {
            $stmt->bind_param("ss", $username, $hashed_password);
            return $stmt->execute();
        }
        return false;
    }

    // Đăng nhập người dùng
    public function login($username, $password) {
        $query = "SELECT * FROM users WHERE username = ?";
        if ($stmt = $this->conn->prepare($query)) {
            $stmt->bind_param("s", $username);
            $stmt->execute();
            $result = $stmt->get_result();

            if ($result->num_rows === 1) {
                $user = $result->fetch_assoc();
                if (password_verify($password, $user['password'])) {
                    session_start();
                    $_SESSION['user_id'] = $user['id'];
                    return true; // Đăng nhập thành công
                }
            }
        }
        return false; // Đăng nhập thất bại
    }

    // Đăng xuất người dùng
    public function logout() {
        session_start();
        session_unset();
        session_destroy();
        return true;
    }
}
?>

Giải thích chi tiết các hàm trong class User

  • Constructor: Nhận một đối tượng kết nối đến cơ sở dữ liệu và gán cho biến $conn.
  • register: Nhận tên người dùng và mật khẩu, băm mật khẩu để bảo mật, và thêm thông tin vào bảng users. Sử dụng phương thức password_hash để băm mật khẩu.
  • login: Xác thực thông tin đăng nhập bằng cách truy vấn người dùng từ cơ sở dữ liệu. Nếu tìm thấy người dùng và mật khẩu tương ứng khớp, phiên làm việc sẽ được khởi tạo.
  • logout: Hủy phiên đăng nhập một cách an toàn.

Kết nối với cơ sở dữ liệu

Tiếp theo, bạn cần kết nối đến cơ sở dữ liệu MySQL từ tệp PHP. Dưới đây là cách kết nối cơ sở dữ liệu:

<?php
$host = 'localhost';
$user = 'root'; // Tùy thuộc vào cấu hình MySQL của bạn
$password = '';
$dbname = 'user_management';

$conn = new mysqli($host, $user, $password, $dbname);
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
}
?>

Sử dụng class User

Sau khi định nghĩa class và kết nối cơ sở dữ liệu, bạn có thể sử dụng class User trong tệp PHP khác để thực hiện các chức năng đăng ký, đăng nhập và đăng xuất.

Ví dụ sử dụng

<?php
require 'db_connection.php'; // Tệp kết nối DB
require 'User.php'; // Tệp chứa class User

$user = new User($conn);

// Đăng ký người dùng
if (isset($_POST['register'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if ($user->register($username, $password)) {
        echo "Đăng ký thành công!";
    } else {
        echo "Đăng ký thất bại!";
    }
}

// Đăng nhập người dùng
if (isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if ($user->login($username, $password)) {
        echo "Đăng nhập thành công!";
    } else {
        echo "Đăng nhập thất bại!";
    }
}

// Đăng xuất người dùng
if (isset($_POST['logout'])) {
    $user->logout();
    echo "Đăng xuất thành công!";
}
?>

Tạo giao diện người dùng cho đăng nhập và đăng xuất

Cuối cùng, để người dùng có thể thực hiện các thao tác này, bạn cần xây dựng giao diện người dùng. Dưới đây là một ví dụ đơn giản về form đăng ký và đăng nhập.

Form đăng ký

<form method="POST" action="">
    <h2>Đăng ký</h2>
    <input type="text" name="username" placeholder="Tên người dùng" required>
    <input type="password" name="password" placeholder="Mật khẩu" required>
    <button type="submit" name="register">Đăng ký</button>
</form>

Form đăng nhập

<form method="POST" action="">
    <h2>Đăng nhập</h2>
    <input type="text" name="username" placeholder="Tên người dùng" required>
    <input type="password" name="password" placeholder="Mật khẩu" required>
    <button type="submit" name="login">Đăng nhập</button>
</form>

Form đăng xuất

<form method="POST" action="">
    <button type="submit" name="logout">Đăng xuất</button>
</form>

Kết luận

Trên đây là hướng dẫn chi tiết về cách viết class đăng nhập và đăng xuất với PHP và MySQL. Chúng ta đã xem xét cách thiết lập cơ sở dữ liệu, tạo class người dùng, và xây dựng giao diện người dùng đơn giản để thực hiện các thao tác đăng ký, đăng nhập và đăng xuất.

Hệ thống này có thể được mở rộng thêm nhiều tính năng như xác minh email, khôi phục mật khẩu, và quản lý phiên người dùng. Bạn có thể tiến xa hơn bằng cách áp dụng các kỹ thuật bảo mật như CSRF token và xác thực hai yếu tố để bảo vệ tốt hơn cho ứng dụng của mình.

Hy vọng rằng bài viết này sẽ giúp bạn có cái nhìn sâu sắc hơn về cách triển khai hệ thống quản lý người dùng và mong rằng bạn sẽ thành công trong việc phát triển ứng dụng của mình.

Comments