Tutorial PHP #18: Cookie di PHP

1. Apa itu Cookie?

Cookie adalah data kecil yang disimpan di browser user (bukan di server seperti session). Cookie dikirim oleh server dan disimpan browser, lalu dikirim kembali ke server di setiap request berikutnya.

Contoh penggunaan cookie: remember me, preferensi tema (dark/light mode), bahasa, atau data non-sensitif lainnya.

Perbedaan Cookie vs Session:

  • Cookie disimpan di browser, session disimpan di server
  • Cookie bisa bertahan sangat lama, session biasanya habis saat browser ditutup
  • Cookie tidak aman untuk data sensitif karena bisa dimanipulasi user

2. Membuat Cookie

Cookie harus di-set sebelum output apapun (sama seperti session_start()).

<?php
// setcookie(name, value, expire, path, domain, secure, httponly)
setcookie("username", "ariq", time() + 86400);      // expire 1 hari
setcookie("tema", "dark", time() + (30 * 86400));   // expire 30 hari
setcookie("bahasa", "id", time() + (365 * 86400));  // expire 1 tahun

echo "Cookie berhasil dibuat";
?>

Nilai time() + 86400 artinya cookie expire setelah 86400 detik (= 1 hari) dari sekarang.

3. Mengambil Cookie

<?php
// Cookie baru bisa diakses di request BERIKUTNYA, bukan request yang sama!
if (isset($_COOKIE["username"])) {
    $username = $_COOKIE["username"];
    echo "Halo, $username! Selamat datang kembali.";
} else {
    echo "Cookie tidak ditemukan";
}

// Dengan null coalescing
$tema = $_COOKIE["tema"] ?? "light";
echo "Tema aktif: $tema";
?>

4. Update Cookie

<?php
// Cukup set ulang dengan nama yang sama
setcookie("tema", "light", time() + (30 * 86400));
echo "Tema diubah ke light";
?>

5. Menghapus Cookie

<?php
// Set expire ke masa lalu untuk menghapus cookie
setcookie("username", "", time() - 3600);
setcookie("tema", "", time() - 3600);

echo "Cookie dihapus";
?>

6. Cookie Aman (Secure Cookie)

<?php
// Parameter lengkap untuk cookie yang lebih aman
setcookie(
    "remember_token",           // nama
    "abc123xyz",                // nilai
    time() + (30 * 86400),      // expire: 30 hari
    "/",                        // path: berlaku di seluruh website
    "",                         // domain
    true,                       // secure: hanya kirim via HTTPS
    true                        // httponly: tidak bisa diakses JavaScript (cegah XSS)
);
?>

Tips keamanan: Selalu aktifkan httponly = true untuk mencegah cookie diakses via JavaScript, dan secure = true jika menggunakan HTTPS.

7. Contoh Fitur Remember Me

<?php
session_start();

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $username   = $_POST["username"] ?? "";
    $remember   = isset($_POST["remember"]);

    // Proses autentikasi...
    // Jika login berhasil:
    if ($remember) {
        // Simpan token di cookie selama 30 hari
        $token = bin2hex(random_bytes(32));
        setcookie("remember_token", $token, time() + (30 * 86400), "/", "", false, true);
        // Simpan token di database untuk verifikasi
    }
}
?>

8. Ringkasan

  • Cookie disimpan di browser user, bisa bertahan lama
  • Gunakan setcookie() untuk membuat/update/hapus cookie
  • Data cookie diakses via $_COOKIE
  • Jangan simpan data sensitif di cookie - data bisa dilihat dan dimanipulasi user
  • Aktifkan httponly dan secure untuk keamanan lebih

Tutorial berikutnya membahas upload file di PHP.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.