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
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
// login.php
session_start();
if ($_POST["username"] === "admin" && $_POST["password"] === "rahasia123") {
$_SESSION["user"] = "admin";
header("Location: dashboard.php");
exit;
}<?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
// 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 panggilexitagar 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 panggilsession_regenerate_id(true)setiap kali user berhasil login agar ID lama tidak bisa dipakai ulang.