Dalam pengembangan web, cookie dan session adalah dua konsep penting untuk menyimpan data pengguna antar halaman. Keduanya sering digunakan untuk keperluan login, pengingat pengguna, dan personalisasi pengalaman web. Namun, banyak pemula masih bingung, apa sebenarnya perbedaan cookie dan session di PHP, dan kapan harus menggunakan masing-masing?
Untuk menjawabnya, kita akan bahas dari konsep dasar hingga contoh nyata menggunakan studi kasus login dengan fitur “Remember Me”.
Apa Itu Cookie di PHP
Cookie adalah data kecil yang disimpan di browser pengguna. Cookie digunakan agar situs dapat mengenali pengguna saat mereka kembali membuka website — meskipun browser sudah ditutup.
Contoh membuat cookie:
<?php
setcookie("username", "Arvian", time() + 3600, "/"); // berlaku 1 jam
?>
Cookie dikirim ke server setiap kali pengguna mengunjungi situs tersebut kembali.
Cocok digunakan untuk:
-
Menyimpan preferensi pengguna (tema gelap/terang)
-
Menyimpan login otomatis (Remember Me)
-
Menyimpan data ringan antar kunjungan
Apa Itu Session di PHP
Session disimpan di sisi server, bukan browser. Saat pengguna membuka situs, PHP membuat session_id unik dan menyimpannya sementara di browser (biasanya dalam cookie bernama PHPSESSID).
Contoh menggunakan session:
<?php session_start(); $_SESSION['username'] = "Arvian"; echo $_SESSION['username']; ?>
Cocok digunakan untuk:
-
Menyimpan status login yang aman
-
Menyimpan data sensitif (ID user, role, token)
-
Menangani proses checkout atau form bertahap
Tabel Perbandingan Cookie vs Session
| Aspek | Cookie | Session |
|---|---|---|
| Lokasi penyimpanan | Browser (klien) | Server |
| Keamanan | Rentan dicuri (XSS) | Lebih aman |
| Ukuran | Maks. ±4KB per domain | Tidak terbatas (bergantung server) |
| Lama hidup | Bisa bertahan lama | Hilang saat browser ditutup |
| Akses | Bisa dibaca JavaScript | Hanya diakses oleh server PHP |
| Penggunaan umum | “Remember Me”, preferensi | Login, keranjang belanja, autentikasi |
Studi Kasus: Login dengan “Remember Me”
Sekarang kita gabungkan konsep session dan cookie dalam kasus nyata — sistem login dengan fitur “Ingat Saya”.
Struktur file:
config.php login.php dashboard.php logout.php
File: config.php
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "db_login";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
File: login.php
<?php
session_start();
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = trim($_POST['username']);
$password = $_POST['password'];
$remember = isset($_POST['remember']);
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$user = $result->fetch_assoc();
if (password_verify($password, $user['password'])) {
$_SESSION['user'] = $user['username'];
// Jika Remember Me dicentang → buat cookie
if ($remember) {
setcookie("remember_user", $user['username'], time() + (86400 * 7), "/", "", false, true);
}
header("Location: dashboard.php");
exit;
} else {
echo "<div class='alert alert-danger'>Password salah!</div>";
}
} else {
echo "<div class='alert alert-danger'>Username tidak ditemukan!</div>";
}
}
?>
<form method="POST">
<h3>Login</h3>
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<label><input type="checkbox" name="remember"> Ingat Saya</label><br>
<button type="submit">Login</button>
</form>
File: dashboard.php
<?php
session_start();
// jika session belum ada, coba periksa cookie
if (!isset($_SESSION['user']) && isset($_COOKIE['remember_user'])) {
$_SESSION['user'] = $_COOKIE['remember_user'];
}
if (!isset($_SESSION['user'])) {
header("Location: login.php");
exit;
}
?>
<h2>Selamat Datang, <?php echo $_SESSION['user']; ?>!</h2>
<p>Anda berhasil login menggunakan <?php echo isset($_COOKIE['remember_user']) ? 'Cookie' : 'Session'; ?>.</p>
<a href="logout.php">Logout</a>
File: logout.php
<?php
session_start();
session_destroy();
// hapus cookie juga
setcookie("remember_user", "", time() - 3600, "/");
header("Location: login.php");
exit;
?>
Penjelasan Mekanisme Login
| Tahap | Proses |
|---|---|
| 1. Login | Jika pengguna berhasil login, data disimpan di $_SESSION. |
| 2. Remember Me | Jika dicentang, cookie “remember_user” dibuat dan disimpan di browser selama 7 hari. |
| 3. Revisit | Saat user membuka kembali situs tanpa logout, sistem membaca cookie dan otomatis login. |
| 4. Logout | Menghapus session dan cookie agar pengguna benar-benar keluar. |
Tips Keamanan
Jangan simpan password dalam cookie!
Simpan hanya ID atau username, bukan data sensitif.
Gunakan httponly dan secure flag
Untuk mencegah cookie dicuri oleh JavaScript:
<?php
setcookie("remember_user", $user['username'], time() + (86400 * 7), "/", "", true, true);
?>
Gunakan Token Unik untuk Remember Me (lebih aman)
Simpan token acak di database dan cookie, lalu cocokkan saat pengguna kembali login.
Kesimpulan
Baik cookie maupun session memiliki peran penting dalam manajemen pengguna di PHP.
-
Session lebih aman untuk data sensitif (login, autentikasi).
-
Cookie berguna untuk kenyamanan pengguna (Remember Me, preferensi).
Dengan memadukan keduanya, kamu bisa membangun sistem login yang aman sekaligus user-friendly.