Xác thực qua phiên làm việc trên PHP
Hệ thống xác thực của chúng ta cần hoạt động như sau: người dùng,
muốn xác thực trên trang web, truy cập
vào trang login.php, nhập đúng
tên đăng nhập và mật khẩu và sau đó di chuyển qua các trang
của trang web trong trạng thái đã được xác thực.
Để các trang khác của trang web biết được rằng người dùng của chúng ta đã được xác thực, chúng ta phải lưu lại dấu hiệu về điều này trong phiên làm việc.
Hiện tại, hệ thống xác thực của chúng ta chưa hoàn toàn hoạt động, vì chúng ta chưa kết nối phiên làm việc và các trang khác của trang web không thể biết, người dùng đã được xác thực hay chưa.
Chúng ta sẽ lưu dấu hiệu về việc xác thực trong biến
phiên $_SESSION['auth'] - nếu ở đó
được ghi là true, thì người dùng đã được xác thực,
còn nếu là null - thì chưa được xác thực.
Hãy thực hiện chỉnh sửa tương ứng trong mã của chúng ta:
<?php
session_start();
if (!empty($_POST['password']) and !empty($_POST['login'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$_SESSION['auth'] = true;
} else {
// nhập sai tên đăng nhập hoặc mật khẩu
}
}
?>
Bây giờ trên bất kỳ trang nào của trang web, chúng ta có thể kiểm tra, người dùng đã được xác thực hay chưa, bằng cách này:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Có thể đóng hoàn toàn nội dung của một trang nào đó đối với người dùng chưa được xác thực:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>nội dung chỉ dành cho người dùng đã xác thực</p>
</body>
</html>
<?php else: ?>
<p>vui lòng xác thực</p>
<?php endif; ?>
Có thể chỉ đóng một phần của trang:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>nội dung cho mọi người dùng</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'nội dung chỉ dành cho người dùng đã xác thực';
}
?>
<p>nội dung cho mọi người dùng</p>
</body>
</html>
Giả sử trên trang web của chúng ta, ngoài trang login.php,
còn có các trang 1.php, 2.php
và 3.php. Hãy làm sao để chỉ người dùng
đã được xác thực mới có thể truy cập được những
trang này.
Giả sử trên trang web của chúng ta còn có trang
index.php. Hãy làm sao để một phần
trang này mở cho tất cả người dùng,
còn một phần - chỉ dành cho người dùng đã xác thực.
Hãy sửa đổi mã của bạn sao cho khi xác thực thành công, tên đăng nhập của người dùng cũng được ghi vào phiên làm việc.
Hãy làm sao cho khi truy cập vào bất kỳ trang nào của trang web, người dùng đã xác thực thấy được tên đăng nhập của mình, còn người chưa xác thực - thấy một liên kết đến trang xác thực.