sessionwebMenengah3 mnt baca

Session Dasar

Ingat data antar halaman: session_start, $_SESSION, dan menghapus session.

Analogi: Gelang Pengunjung

HTTP itu pelupa: setiap request adalah orang asing baru, server tidak ingat request sebelumnya. Padahal kita butuh ingatan: "user ini sudah login", "isi keranjangnya apa". Session seperti gelang yang dipasang ke pengunjung: gelang itu sendiri hanya berisi nomor ID, tapi di "ruang arsip" server tersimpan semua data milik nomor tersebut.

Cara kerjanya: saat session_start() dipanggil pertama kali, PHP membuat ID acak unik, menyimpannya di cookie browser (PHPSESSID), dan menyiapkan "loker" data di server ($_SESSION). Request berikutnya membawa ID itu, PHP membuka loker yang sama.

php
<?php
// Contoh 1: session sebagai penghitung kunjungan
session_start();   // WAJIB di baris paling atas, sebelum output apa pun!

$_SESSION["kunjungan"] = ($_SESSION["kunjungan"] ?? 0) + 1;
echo "Kamu sudah berkunjung " . $_SESSION["kunjungan"] . " kali.";
// Refresh: angka bertambah. Tutup browser, buka lagi: mulai dari 1 lagi? (tergantung cookie)

$_SESSION adalah array super-global seperti $_GET/$_POST, tapi isinya bertahan antar halaman selama session hidup. Pola ($_SESSION["x"] ?? 0) + 1 adalah idiom "ambil atau default, lalu tambah".

php
<?php
// Contoh 2: menyimpan preferensi antar halaman
session_start();

if (isset($_GET["tema"])) {
    // validasi dulu! hanya izinkan nilai yang dikenal
    $_SESSION["tema"] = in_array($_GET["tema"], ["terang", "gelap"], true)
        ? $_GET["tema"] : "terang";
}

$tema = $_SESSION["tema"] ?? "terang";
echo "Tema aktif: $tema";
// Pindah ke halaman lain yang juga session_start(), $tema tetap "gelap"

Session ideal untuk data sementara dan privat: status login, isi keranjang, pesan flash ("data tersimpan!"). Bukan untuk data permanen (itu tugas database) atau data besar (menyedot memori server).

Jebakan yang Sering Terjadi

session_start() setelah output. Sama seperti header(): session mengirim cookie lewat HTTP header, jadi harus sebelum output apa pun. Spasi sebelum <?php saja sudah memicu "headers already sent". Aturan: session_start(); selalu baris pertama file.

Lupa session_start() di halaman lain. $_SESSION di halaman tanpa session_start() hanyalah array kosong biasa. Setiap file PHP yang butuh session wajib memanggilnya. Lupa di satu halaman = data "hilang" misterius.

Session vs Pilihan Lain

Kapan memakai session, kapan yang lain?

  • Session: data privat sementara (login, keranjang). Aman karena di server.
  • Cookie: preferensi non-sensitif yang awet (tema, bahasa). Ringan, tapi terlihat user.
  • Database: data permanen (profil, riwayat order). Selalu ada meski session habis.
  • Cache (Redis): data sementara yang diakses super sering. Session default (file) lambat untuk traffic tinggi.

Contoh arsitektur nyata: status login di session, isi keranjang di database (agar tidak hilang saat session habis), preferensi tema di cookie, dan hasil query berat di cache. Tiap alat untuk tugasnya.

Catatan teknis: Secara default data session disimpan sebagai file di server (/tmp). Di production dengan banyak server, penyimpanan dialihkan ke database atau Redis agar semua server berbagi session yang sama. Untuk belajar di XAMPP, default-nya sudah cukup.

Tantangan

Penghitung kunjungan

Buat counter.php: tiap refresh, tambah $_SESSION["kunjungan"] dan tampilkan "Ini kunjunganmu yang ke-X". Tambahkan link "Reset" ke counter.php?reset=1 yang menghapus session lalu redirect kembali.