Trong quá trình phát triển ứng dụng web bằng PHP, một trong những tính năng quan trọng nhất là xác thực người dùng. Sau khi người dùng đăng nhập thành công, bạn cần một cách để duy trì trạng thái đăng nhập của họ trong suốt phiên làm việc — đây chính là lúc session phát huy tác dụng.
Session là một cơ chế mạnh mẽ giúp lưu trữ thông tin tạm thời về người dùng trên server. Nhờ session, bạn có thể tạo ra một trải nghiệm đăng nhập liên tục, an toàn và chuyên nghiệp. Trong bài viết này, chúng ta sẽ cùng khám phá cách sử dụng session để giữ trạng thái đăng nhập, từ các bước cơ bản đến các biện pháp bảo mật cần thiết.
Tổng quan về Session trong PHP
Session là gì?
Session là một biến toàn cục lưu trữ thông tin người dùng tạm thời trên máy chủ. Mỗi người dùng khi truy cập vào website sẽ được gán một Session ID duy nhất, cho phép bạn theo dõi người dùng đó trong suốt quá trình tương tác.
Điều này giúp bạn quản lý quyền truy cập, hiển thị thông tin cá nhân hóa và duy trì phiên đăng nhập mà không cần người dùng phải xác thực lại ở mỗi trang.
Ưu điểm của việc dùng Session
-
Dữ liệu được lưu trên server, tránh được các rủi ro khi lưu trữ ở client.
-
Session tự động hết hạn sau một thời gian không hoạt động, tăng tính bảo mật.
-
Dễ triển khai và phù hợp với mọi loại ứng dụng web sử dụng PHP.
Quy trình giữ đăng nhập bằng Session
Các bước tổng quát
- Tạo form đăng nhập: Người dùng nhập username và password.
- Xác thực thông tin: Kiểm tra username/password trong CSDL.
- Tạo session khi đăng nhập thành công.
- Kiểm tra session ở các trang nội dung.
- Hủy session khi người dùng đăng xuất.
Tại sao cần kiểm tra session ở mỗi trang?
Mỗi khi người dùng truy cập một trang cần bảo vệ, bạn cần xác nhận rằng session vẫn tồn tại và hợp lệ. Điều này giúp bảo vệ các trang nội dung khỏi truy cập trái phép, đồng thời nâng cao trải nghiệm người dùng.
Tạo form đăng nhập
Giao diện người dùng cần thân thiện
Khi bắt đầu, bạn cần xây dựng một form đăng nhập đơn giản với hai trường: tên người dùng và mật khẩu. Điều này không chỉ giúp người dùng dễ sử dụng mà còn là bước khởi đầu để xử lý logic phía server.
Form nên sử dụng phương thức POST để đảm bảo thông tin không bị lộ trên URL. Đồng thời, nên sử dụng HTML và CSS để form hiển thị rõ ràng, chuyên nghiệp.
<!-- login.php -->
<form method="POST" action="login_process.php">
<label>Tên đăng nhập:</label><br>
<input type="text" name="username" required><br>
<label>Mật khẩu:</label><br>
<input type="password" name="password" required><br><br>
<input type="submit" value="Đăng nhập">
</form>
Xử lý đăng nhập và tạo Session
Kiểm tra thông tin đăng nhập từ form
Khi người dùng gửi biểu mẫu, bạn cần xử lý dữ liệu nhập vào và kiểm tra xem username và password có khớp với thông tin lưu trong cơ sở dữ liệu không. Việc này nên thực hiện một cách bảo mật bằng cách sử dụng prepared statements.
Nếu thông tin hợp lệ, bạn sẽ bắt đầu một session và lưu lại thông tin cần thiết, ví dụ như ID người dùng hoặc tên đăng nhập.
<?php
session_start(); // Bắt đầu session
// Kết nối CSDL
$conn = new mysqli("localhost", "root", "", "ten_database");
$username = $_POST['username'];
$password = $_POST['password'];
// Prepared Statement để tránh SQL Injection
$stmt = $conn->prepare("SELECT id, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 1) {
$row = $result->fetch_assoc();
// Kiểm tra mật khẩu (đã mã hóa với password_hash)
if (password_verify($password, $row['password'])) {
$_SESSION['user_id'] = $row['id']; // Tạo session
header("Location: dashboard.php");
exit();
} else {
echo "Sai mật khẩu";
}
} else {
echo "Không tìm thấy người dùng";
}
?>
Kiểm tra đăng nhập ở các trang bảo vệ
Cần xác minh session ở mỗi trang
Sau khi người dùng đã đăng nhập, bạn cần chặn quyền truy cập vào các trang như dashboard.php nếu họ chưa đăng nhập. Cách làm là kiểm tra xem session có tồn tại không trước khi hiển thị nội dung.
Đây là cách giúp bảo vệ tài nguyên khỏi những truy cập trái phép, đồng thời tăng cường bảo mật toàn hệ thống.

