sessionloginautentikasiMenengah3 mnt baca

Session

Menyimpan data login antar halaman dengan $_SESSION: login, proteksi halaman, dan logout.

Masalah yang diselesaikan session

HTTP itu stateless: setiap request dianggap baru dan tidak kenal request sebelumnya. Session memberi server "ingatan" tentang pengunjung lewat ID unik yang disimpan di cookie browser.

Memakai session

php
<?php
session_start(); // WAJIB di baris paling atas, sebelum output apapun

$_SESSION["username"] = "malik";
$_SESSION["login_at"] = time();

echo "Halo, " . htmlspecialchars($_SESSION["username"]);

Data tersimpan di server, browser hanya memegang ID session. Buka halaman lain dan datanya masih ada selama session belum kedaluwarsa.

Contoh alur login sederhana

php
<?php
// login.php
session_start();
if ($_POST["username"] === "admin" && $_POST["password"] === "rahasia123") {
    $_SESSION["user"] = "admin";
    header("Location: dashboard.php");
    exit;
}
php
<?php
// dashboard.php - halaman terproteksi
session_start();
if (!isset($_SESSION["user"])) {
    header("Location: login.php");
    exit;
}
echo "Selamat datang di dashboard, " . htmlspecialchars($_SESSION["user"]);
php
<?php
// logout.php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;

Aturan penting

  • session_start() harus dipanggil sebelum ada output (termasuk spasi/BOM di awal file), kalau tidak muncul error "headers already sent".
  • Setelah header("Location: ...") selalu panggil exit agar kode di bawahnya tidak ikut jalan.
  • Jangan simpan password (apalagi plaintext) di session, cukup username atau user ID.

Catatan teknis: Session di PHP disimpan sebagai file di server secara default dan ID-nya dikirim via cookie PHPSESSID. Kalau ID ini dicuri (misalnya lewat XSS), penyerang bisa membajak login korban (session hijacking). Mitigasi dasar: selalu pakai HTTPS, dan panggil session_regenerate_id(true) setiap kali user berhasil login agar ID lama tidak bisa dipakai ulang.