Belajar PHP & MySQL #9: Sistem Login dan Session

Heru Iryanto
Heru Iryanto
Teacher, Content Creator and Full-Stack Developer
7 August 2026

Website yang terbuka bebas bagi siapa saja untuk mengubah dan menghapus isi tabelnya (Database) bukanlah aplikasi, melainkan bencana publik.

Di sinilah Sistem Autentikasi (Login/Logout) masuk sebagai satpam. Untuk memahami sistem Login, Anda harus tahu mengapa website Anda sering lupa dengan Anda setelah me-refresh layar.

1️⃣ Masalah “Penyakit Lupa” pada Protokol HTTP

Protokol website (HTTP) pada dasarnya tidak memiliki ingatan (Stateless). Artinya, ketika Anda memasukkan sandi di halaman login.php dan sukses, lalu Anda pindah ke halaman tambah_buku.php, browser akan langsung melupakan bahwa 1 detik yang lalu Anda baru saja Login! Browser akan bertanya lagi: “Siapa Anda?”

Solusinya: PHP harus mencap dahi/menempelkan stiker ke kepala si pengunjung. Stiker ini bernama Session (Sesi). Selama stiker ini belum dicabut (Logout), pengunjung bebas masuk ke ruang mana saja.

Silahkan buat file login.php di folder perpustakaan. Berikut contoh kodenya:

<!DOCTYPE html>
<html>
<head>
    <title>Login Admin Perpustakaan</title>
</head>
<body>
    <h1>Form Login Admin</h1>
    <form action="proses_login.php" method="POST">
        Username: <input type="text" name="isian_username"><br><br>
        Password: <input type="password" name="isian_password"><br><br>
        <input type="submit" value="Masuk ke Ruang Rahasia">
    </form>
</body>
</html>

2️⃣ Menempelkan Stiker (Proses Login)

Mari buat halaman proses_login.php.

<?php
// ATURAN MUTLAK! Setiap kali bermain dengan sistem ingatan stiker, 
// fungsi ini WAJIB berada di baris pertama paling atas, tidak boleh ada spasi HTML!
session_start();

$user = $_POST['isian_username'];
$pass = $_POST['isian_password'];

// Logika Super Sederhana (Username = admin, Sandi = 123)
if ($user == "admin" && $pass == "123") {
    
    // PEMBUATAN STIKER!
    // Kita menaruh status ke dalam kantong Superglobal bernama $_SESSION
    $_SESSION['status_login'] = "sudah_masuk";
    $_SESSION['nama_pejabat'] = "Pak Budi Sang Admin";
    
    // Buka gerbang, tendang ke halaman rahasia
    header("Location: tambah_buku.php");

} else {
    echo "Password Salah! Penyusup terdeteksi.";
}
?>

3️⃣ Menjaga Pintu Halaman (Verifikasi Stiker)

Sekarang, kita pasang gembok di bagian paling atas file tambah_buku.php, form_edit.php dan proses_hapus.php agar tidak bisa ditembus lewat URL iseng.

<?php
// Panggil tukang periksa stikernya
session_start();

// Pengecekan Logika:
// "Jika stiker di dahinya tidak bertuliskan 'sudah_masuk', tendang balik ke Login!"
if ($_SESSION['status_login'] != "sudah_masuk") {
    header("Location: login.php");
    exit; // Berhenti total! Kode di bawah baris ini tidak akan dibaca oleh hacker.
}

// Jika lolos pengecekan, ia boleh membaca kode selanjutnya:
echo "Selamat datang di ruang rahasia, " . $_SESSION['nama_pejabat'] . " | <a href='logout.php'>Logout</a>";

// (Letakkan semua logika rahasia CRUD Anda di bawah sini)
?>

4️⃣ Mencabut Stiker (Proses Logout)

Sangat tidak aman jika pengguna bermain di Warnet (Warung Internet) lalu pulang tanpa mencabut stiker sesinya. Orang lain yang duduk di komputernya bisa langsung mengakses ruang rahasia!

Oleh karena itu, selalu buat tombol Keluar yang mengarah ke file logout.php.

<?php
session_start();

// Merobek dan menghancurkan seluruh memori stiker yang menempel di browser!
session_destroy();

// Mengusir paksa kembali ke jalanan (Halaman depan)
header("Location: index_buku.php");
?>

🗽 Kesimpulan

Variabel kardus $_SESSION sangat luar biasa karena kotak itu dibawa melayang ke mana-mana, berpindah-pindah antar halaman web tanpa kehilangan datanya!

Inilah akhir dari petualangan teoritis kita. Seluruh batu fondasi pembangun candi telah Anda pegang. Saatnya membangun candi Front-End & Back-End secara utuh: sebuah Sistem Blog yang Terproteksi. Mari persiapkan rencana besar kita di materi Proyek Akhir (Sistem Blog Lengkap).