Cara Menggunakan Session dan Cookie di PHP

Saat membangun aplikasi web, kita sering perlu mengingat informasi pengguna di antara halaman โ€” misalnya status login, preferensi tampilan, atau isi keranjang belanja. HTTP sendiri...

Cara Menggunakan Session dan Cookie di PHP

Saat membangun aplikasi web, kita sering perlu mengingat informasi pengguna di antara halaman โ€” misalnya status login, preferensi tampilan, atau isi keranjang belanja. HTTP sendiri bersifat stateless (tidak mengingat state), sehingga PHP menyediakan dua mekanisme untuk mengatasi ini: Session dan Cookie. Keduanya memiliki karakteristik berbeda dan cocok untuk kegunaan yang berbeda pula.

Perbedaan Session dan Cookie

  • Session โ€” data disimpan di server. Browser hanya menyimpan ID session (berupa cookie kecil). Lebih aman untuk data sensitif seperti status login.
  • Cookie โ€” data disimpan langsung di browser pengguna. Bisa diakses dan dimanipulasi oleh pengguna. Cocok untuk data tidak sensitif seperti preferensi tema atau username yang diingat.

Menggunakan Session di PHP

Untuk menggunakan session, panggil session_start() di awal setiap halaman yang membutuhkan session, sebelum output HTML apapun:

<?php
session_start();

// Menyimpan data ke session
$_SESSION['user_id']   = 42;
$_SESSION['username']  = 'budi_santoso';
$_SESSION['is_logged_in'] = true;

echo "Session berhasil dibuat untuk: " . $_SESSION['username'];

Membaca session di halaman lain:

<?php
session_start();

if (isset($_SESSION['is_logged_in']) && $_SESSION['is_logged_in'] === true) {
    echo "Selamat datang, " . htmlspecialchars($_SESSION['username']) . "!";
} else {
    header('Location: login.php');
    exit;
}

Contoh: Sistem Login dengan Session

Berikut contoh sederhana proses login yang menyimpan data ke session:

<?php
// login.php
session_start();
require 'koneksi.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = trim($_POST['username']);
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username LIMIT 1");
    $stmt->execute([':username' => $username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        // Regenerasi ID session setelah login โ€” penting untuk keamanan!
        session_regenerate_id(true);

        $_SESSION['user_id']      = $user['id'];
        $_SESSION['username']     = $user['username'];
        $_SESSION['is_logged_in'] = true;

        header('Location: dashboard.php');
        exit;
    } else {
        $error = "Username atau password salah.";
    }
}

Menghapus Session (Logout)

Untuk logout yang bersih, hapus semua data session dan hancurkan sesinya:

<?php
// logout.php
session_start();

// Hapus semua variabel session
$_SESSION = [];

// Hapus cookie session dari browser
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(
        session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Hancurkan session di server
session_destroy();

header('Location: login.php');
exit;

Menggunakan Cookie di PHP

Cookie dibuat dengan fungsi setcookie() yang harus dipanggil sebelum output HTML:

<?php
// Membuat cookie yang berlaku selama 30 hari
$expire = time() + (30 * 24 * 60 * 60); // 30 hari dalam detik

setcookie(
    'tema_favorit',   // nama cookie
    'dark',           // nilai
    [
        'expires'  => $expire,
        'path'     => '/',
        'secure'   => true,    // hanya kirim lewat HTTPS
        'httponly' => true,    // tidak bisa diakses JavaScript
        'samesite' => 'Lax',  // proteksi CSRF dasar
    ]
);

echo "Cookie tema berhasil disimpan!";

Membaca dan menghapus cookie:

<?php
// Membaca cookie
if (isset($_COOKIE['tema_favorit'])) {
    $tema = $_COOKIE['tema_favorit'];
    echo "Tema pilihanmu: " . htmlspecialchars($tema);
}

// Menghapus cookie dengan mengatur waktu kedaluwarsa ke masa lalu
setcookie('tema_favorit', '', time() - 3600, '/');
echo "Cookie telah dihapus.";

Tips Keamanan Session dan Cookie

  • Selalu panggil session_regenerate_id(true) setelah login berhasil untuk mencegah session fixation attack.
  • Set httponly = true pada cookie agar tidak bisa diakses JavaScript (melindungi dari XSS).
  • Set secure = true agar cookie hanya dikirim melalui HTTPS.
  • Jangan simpan data sensitif (seperti password) di cookie atau session yang terekspos.
  • Atur batas waktu session yang wajar di php.ini: session.gc_maxlifetime.

Kesimpulan

Session dan cookie adalah dua senjata utama untuk mengelola state pengguna di PHP. Gunakan session untuk data sensitif seperti status login, dan cookie untuk preferensi yang boleh diingat oleh browser. Dengan menerapkan praktik keamanan yang tepat โ€” seperti regenerasi ID session dan atribut cookie yang aman โ€” aplikasi kamu akan jauh lebih terlindungi dari serangan umum seperti session hijacking dan XSS.

session php cookie php php session login cara pakai session php perbedaan session dan cookie php php native session
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’