Pengesahan melalui Sesi dalam PHP
Sistem pengesahan kami harus berfungsi seperti berikut: pengguna,
yang ingin mengesahkan diri di laman web, pergi
ke halaman login.php, memasukkan
login dan kata laluan yang betul dan kemudian melayari halaman
laman web dalam keadaan telah disahkan.
Supaya halaman-halaman lain di laman web tahu bahawa pengguna kami telah disahkan, kami harus menyimpan tanda mengenai perkara ini dalam sesi.
Buat masa ini, sistem pengesahan kami belum berfungsi sepenuhnya, kerana kami belum menyambungkan sesi dan halaman-halaman lain di laman web tidak dapat memahami sama ada pengguna telah disahkan atau tidak.
Kami akan menyimpan tanda pengesahan dalam pembolehubah
sesi $_SESSION['auth'] - jika
tertulis true di sana, maka pengguna telah disahkan,
dan jika null - maka tidak disahkan.
Mari kita buat pembetulan yang sesuai dalam kod kami:
<?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 {
// login atau kata laluan salah
}
}
?>
Sekarang di mana-mana halaman laman web, kami boleh menyemak sama ada pengguna telah disahkan atau tidak, dengan cara berikut:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Kita boleh menutup keseluruhan teks sesuatu halaman kepada pengguna yang tidak disahkan:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>teks hanya untuk pengguna yang disahkan</p>
</body>
</html>
<?php else: ?>
<p>sila sahkan diri</p>
<?php endif; ?>
Kita boleh menutup hanya sebahagian halaman:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>teks untuk semua pengguna</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'teks hanya untuk pengguna yang disahkan';
}
?>
<p>teks untuk semua pengguna</p>
</body>
</html>
Andaikan di laman web kami, selain halaman login.php,
terdapat juga halaman 1.php, 2.php
dan 3.php. Buat supaya hanya pengguna yang
telah disahkan boleh mengakses halaman-halaman ini.
Andaikan di laman web kami terdapat juga halaman
index.php. Buat supaya sebahagian
halaman ini terbuka untuk semua pengguna,
dan sebahagian lagi - hanya untuk pengguna yang disahkan.
Ubah suai kod anda supaya upon pengesahan berjaya, login pengguna juga direkodkan dalam sesi.
Buat supaya apabila mengakses mana-mana halaman laman web, pengguna yang telah disahkan melihat login mereka, manakala pengguna yang tidak disahkan - pautan ke halaman pengesahan.