Sistem login PHP MySQL adalah fitur inti untuk membatasi akses ke area tertentu, seperti dashboard admin atau halaman anggota. Namun, membuatnya dengan aman berarti tidak pernah menyimpan password dalam bentuk teks biasa. Panduan ini menunjukkan cara membangun login yang aman dan benar.
Aturan Emas: Jangan Simpan Password Asli
Kesalahan fatal yang sering dilakukan pemula adalah menyimpan password apa adanya di database. Jika database bocor, semua akun terancam. Solusinya adalah hashing — mengubah password menjadi rangkaian karakter acak yang tidak bisa dikembalikan.
Saat Registrasi: Hash Password
<?php
$sandi_hash = password_hash($_POST["sandi"], PASSWORD_DEFAULT);
$stmt = $koneksi->prepare("INSERT INTO pengguna (email, sandi) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $sandi_hash);
$email = $_POST["email"];
$stmt->execute();
?>
Fungsi password_hash() menghasilkan hash yang aman secara otomatis.
Saat Login: Verifikasi Password
Kita tidak bisa membandingkan hash secara langsung. Sebagai gantinya, ambil hash tersimpan lalu cocokkan dengan password_verify():
<?php
$stmt = $koneksi->prepare("SELECT sandi FROM pengguna WHERE email = ?");
$stmt->bind_param("s", $_POST["email"]);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if ($row && password_verify($_POST["sandi"], $row["sandi"])) {
session_start();
$_SESSION["login"] = true;
echo "Login berhasil!";
} else {
echo "Email atau sandi salah.";
}
?>
Melindungi Halaman dengan Session
Setelah login, gunakan session untuk menjaga status dan melindungi halaman:
<?php
session_start();
if (!isset($_SESSION["login"])) {
header("Location: login.php");
exit;
}
echo "Selamat datang di dashboard!";
?>
Kesimpulan
Kunci sistem login PHP MySQL yang aman ada tiga: hash password dengan password_hash(), verifikasi dengan password_verify(), dan kelola status login memakai session. Jangan pernah menyimpan atau membandingkan password dalam bentuk teks biasa.
Referensi: untuk penjelasan lebih mendalam, kunjungi dokumentasi resmi PHP (php.net).

