Local Storage, Session Storage, Cookies: 7 Perbedaan

Local storage, session storage, dan cookies sama-sama membiarkan peramban menyimpan data milik situs web. Karena ketiganya terlihat mirip, banyak pemula memakainya secara bergantian tanpa tahu akibatnya. Padahal pilihan yang keliru bisa membuat data hilang di saat yang salah, memperlambat permintaan ke server, atau membuka celah keamanan.

Artikel ini menjawab pertanyaan utamanya: apa perbedaan local storage, session storage, dan cookies? Kamu akan memahami cara kerja masing-masing, tujuh perbedaan utamanya, contoh kode yang bisa langsung dicoba, aturan keamanan dasar, dan panduan kapan memakai yang mana. Penjelasan resmi API-nya ada di dokumentasi Web Storage API di MDN.

Perbedaan local storage, session storage, dan cookies di browser

Ringkasan cepat

  • Local storage: data bertahan sampai dihapus, tersedia di semua tab situs yang sama, tidak dikirim ke server.
  • Session storage: data hanya hidup selama tab terbuka dan terpisah di setiap tab.
  • Cookies: data kecil yang dikirim otomatis ke server di setiap permintaan, dan bisa diberi atribut keamanan.
  • Jangan menyimpan data sensitif seperti token login di tempat yang bisa dibaca JavaScript.

Daftar Isi

Apa Itu Local Storage, Session Storage, dan Cookies?

Ketiganya adalah mekanisme penyimpanan data di sisi klien, yaitu di peramban milik pengguna, bukan di server.

  • Local storage menyimpan pasangan kunci dan nilai yang bertahan lama di peramban, bahkan setelah peramban ditutup.
  • Session storage serupa, tetapi datanya hilang saat tab atau jendela ditutup.
  • Cookies adalah potongan data kecil yang dikirim bersama setiap permintaan HTTP ke server yang sesuai. Cookies lebih tua dan punya peran khusus dalam komunikasi dengan server.

Mengapa Peramban Menyediakan Tiga Cara Menyimpan Data?

Karena kebutuhannya berbeda. Cookies muncul lebih dulu untuk membuat server “mengingat” pengunjung, misalnya agar tetap masuk setelah login. Seiring waktu, aplikasi web membutuhkan tempat menyimpan data lebih besar di sisi klien tanpa membebani setiap permintaan ke server. Dari kebutuhan itulah lahir Web Storage, yaitu local storage dan session storage.

Kamu bisa membayangkannya begini: cookies adalah kartu identitas yang selalu ditunjukkan ke server, local storage adalah laci permanen di peramban, dan session storage adalah catatan sementara di meja yang dibuang saat tab ditutup.

Cara Kerja Local Storage

  • Bertahan lama. Data tetap ada sampai dihapus oleh kode, pengguna, atau peramban.
  • Dibagi antar tab. Semua tab dan jendela dari situs yang sama (asal yang sama) membaca data yang sama.
  • Hanya teks. Nilai disimpan sebagai string. Objek harus diubah dulu ke JSON.
  • Tidak dikirim ke server secara otomatis.
  • API sinkron. Pembacaan dan penulisan terjadi seketika dan bisa menghambat halaman jika datanya besar.
  • Terikat pada asal. Data dipisahkan berdasarkan kombinasi protokol, domain, dan port, sehingga situs lain tidak bisa membacanya.

Cara Kerja Session Storage

  • Hidup sepanjang sesi tab. Data hilang saat tab atau jendela ditutup, tetapi tetap ada saat halaman dimuat ulang.
  • Terpisah per tab. Dua tab dari situs yang sama punya session storage masing-masing.
  • Antarmuka sama dengan local storage. Perintahnya identik, hanya objeknya berbeda.
  • Tidak dikirim ke server.

Berbeda dengan local storage, data session storage tidak dibagikan antar tab, sehingga cocok untuk data yang hanya relevan bagi satu alur kerja di satu tab.

Cara Kerja Cookies

Cookies diatur oleh server lewat header respons, atau oleh JavaScript lewat document.cookie. Peramban lalu menyertakannya secara otomatis di setiap permintaan ke domain yang cocok. Penjelasan lengkapnya ada di dokumentasi HTTP cookies di MDN.

  • Dikirim otomatis ke server. Ini kekuatan sekaligus kelemahannya: server bisa mengenali pengguna, tetapi setiap permintaan ikut membawa data cookies.
  • Ukuran sangat kecil. Batasnya sekitar 4 KB per cookie, dengan jumlah terbatas per domain.
  • Punya masa berlaku. Cookie bisa kedaluwarsa pada waktu tertentu, atau menjadi cookie sesi yang hilang saat peramban ditutup.
  • Punya atribut keamanan. Misalnya HttpOnly, Secure, dan SameSite.
  • Bisa dibuat oleh server maupun skrip.

7 Perbedaan Local Storage, Session Storage, dan Cookies

AspekLocal storageSession storageCookies
1. KapasitasSekitar 5 MB per asal (bervariasi antar peramban)Sekitar 5 MB per asalSekitar 4 KB per cookie
2. Masa hidupSampai dihapusSampai tab ditutupSampai kedaluwarsa, atau sampai peramban ditutup untuk cookie sesi
3. Dikirim ke serverTidakTidakYa, otomatis di setiap permintaan
4. CakupanSemua tab dari asal yang samaSatu tab dari asal yang samaDomain dan jalur yang cocok
5. Akses JavaScriptYaYaYa, kecuali diberi atribut HttpOnly
6. Dibuat oleh serverTidak, hanya lewat skripTidak, hanya lewat skripYa, lewat header respons
7. Atribut keamananTidak adaTidak adaSecure, HttpOnly, SameSite, dan lainnya

Dari tabel ini terlihat pola besarnya: dua yang pertama adalah penyimpanan lokal di sisi klien, sedangkan cookies adalah jembatan antara peramban dan server.

Contoh Kode Local Storage dan Session Storage

Keduanya memakai perintah yang sama. Untuk local storage:

// Menyimpan data
localStorage.setItem("tema", "gelap");

// Membaca data
const tema = localStorage.getItem("tema");
console.log(tema); // "gelap"

// Menghapus satu kunci
localStorage.removeItem("tema");

// Menghapus semua data milik situs ini
localStorage.clear();

Untuk session storage, cukup ganti objeknya:

sessionStorage.setItem("langkahForm", "2");
const langkah = sessionStorage.getItem("langkahForm");

Menyimpan objek dengan JSON

Karena nilai hanya berupa string, objek dan array harus diubah dulu menjadi JSON:

const pengaturan = { bahasa: "id", ukuranFont: 16 };

localStorage.setItem("pengaturan", JSON.stringify(pengaturan));

const tersimpan = JSON.parse(localStorage.getItem("pengaturan"));
console.log(tersimpan.bahasa); // "id"

Jika kunci belum ada, getItem mengembalikan null. Selalu periksa nilainya sebelum dipakai.

Menangani kegagalan

Penyimpanan bisa gagal, misalnya karena kuota penuh atau pengaturan privasi peramban. Bungkus dengan try dan catch:

try {
  localStorage.setItem("kunci", "nilai");
} catch (galat) {
  console.error("Penyimpanan gagal:", galat);
}

Mendengarkan perubahan dari tab lain

Event storage aktif di tab lain saat local storage berubah, sehingga beberapa tab bisa saling sinkron:

window.addEventListener("storage", (e) => {
  console.log("Berubah:", e.key, e.newValue);
});

Event ini tidak aktif di tab yang melakukan perubahan, hanya di tab lain dari situs yang sama.

Contoh Kode Cookies

Membuat cookie lewat JavaScript

document.cookie = "tema=gelap; max-age=31536000; path=/; SameSite=Lax";

Nilai max-age ditulis dalam detik. Angka 31536000 setara dengan satu tahun. Tanpa max-age atau expires, cookie menjadi cookie sesi.

Membaca cookie

Properti document.cookie mengembalikan semua cookie sebagai satu teks panjang, sehingga perlu dipecah:

function ambilCookie(nama) {
  const pasangan = document.cookie
    .split("; ")
    .find((baris) => baris.startsWith(nama + "="));
  return pasangan ? decodeURIComponent(pasangan.split("=")[1]) : null;
}

console.log(ambilCookie("tema")); // "gelap"

Menghapus cookie

document.cookie = "tema=; max-age=0; path=/";

Penghapusan hanya berhasil jika path dan domain sama dengan saat cookie dibuat.

Membuat cookie dari server

Server mengatur cookie lewat header respons. Contoh untuk cookie sesi yang aman:

Set-Cookie: sesi=abc123; Max-Age=3600; Path=/; Secure; HttpOnly; SameSite=Lax
  • Secure: cookie hanya dikirim lewat HTTPS.
  • HttpOnly: cookie tidak bisa dibaca oleh JavaScript, sehingga lebih aman dari pencurian lewat XSS.
  • SameSite: membatasi pengiriman cookie pada permintaan lintas situs. Pilihannya Strict, Lax, atau None, dan None mensyaratkan Secure.
  • Max-Age dan Expires: menentukan kapan cookie kedaluwarsa.
Cookies dengan atribut keamanan pada tab Application

Keamanan: Apa yang Boleh dan Tidak Boleh Disimpan?

Aturan utamanya: apa pun yang bisa dibaca JavaScript juga bisa dibaca oleh skrip jahat yang berhasil masuk ke halamanmu lewat serangan XSS. Local storage dan session storage selalu bisa dibaca JavaScript. Panduan keamanannya dibahas di HTML5 Security Cheat Sheet dari OWASP.

Jenis dataSaran
Preferensi tampilan (tema, bahasa, ukuran huruf)Aman di local storage
Draf form atau langkah sementaraAman di session storage
Pengenal sesi loginGunakan cookie dengan HttpOnly, Secure, dan SameSite
Token akses, kata sandi, data kartu, data pribadi sensitifJangan simpan di local atau session storage
Data yang harus dipercaya, seperti harga atau hak aksesJangan percaya data klien. Validasi selalu di server

Cookies juga punya risiko sendiri. Karena dikirim otomatis, cookies rentan terhadap serangan CSRF, yaitu permintaan palsu yang memanfaatkan sesi login pengguna. Atribut SameSite dan token anti-CSRF membantu mengurangi risikonya. Panduan lengkapnya ada di Session Management Cheat Sheet dari OWASP.

Catatan tentang privasi

Cookies, terutama untuk pelacakan, berkaitan dengan peraturan perlindungan data pribadi seperti UU Pelindungan Data Pribadi di Indonesia dan GDPR di Eropa. Jika situsmu memakai cookies untuk analitik atau iklan, pelajari kewajiban persetujuan pengguna. Ini informasi umum, bukan nasihat hukum, jadi konsultasikan dengan ahli hukum untuk kasus nyata.

Kapan Memakai Local Storage, Session Storage, atau Cookies?

KebutuhanPilihan yang cocokAlasan
Menyimpan tema gelap atau terangLocal storagePerlu bertahan lama dan tidak perlu ke server
Draf form multi-langkah dalam satu tabSession storageHanya relevan selama tab terbuka
Menjaga pengguna tetap loginCookie HttpOnly dan SecureServer perlu mengenali sesi dan JavaScript tidak boleh membacanya
Menyimpan preferensi bahasa yang dibaca serverCookiesServer perlu mengetahuinya saat menyusun halaman
Menyimpan keranjang belanja sementaraLocal storage atau serverPerlu bertahan, tetapi data penting sebaiknya disimpan di server
Mencatat persetujuan pengguna terhadap cookiesCookiesBiasanya perlu dibaca di sisi server juga
Menyimpan data besar atau terstrukturIndexedDBKapasitas lebih besar dan mendukung pencarian

Alternatif Lain di Luar Tiga Pilihan Ini

  • IndexedDB. Basis data di peramban untuk data besar dan terstruktur, dengan API asinkron.
  • Cache API dan service worker. Untuk menyimpan respons jaringan agar aplikasi bisa bekerja tanpa koneksi.
  • Variabel di memori. Untuk data yang hanya dibutuhkan selama halaman terbuka.
  • Penyimpanan di server. Untuk data penting yang harus tersedia di banyak perangkat dan tidak boleh hilang.

Data di sisi klien tidak bisa dijamin permanen. Pengguna bisa menghapusnya, mode privat membersihkannya, dan sebagian peramban membatasi umur data yang ditulis lewat JavaScript. Jadi jangan menjadikannya satu-satunya tempat penyimpanan data penting.

Cara Melihat dan Menghapus Data di DevTools

  1. Buka DevTools dengan tombol F12 atau klik kanan lalu pilih Inspect.
  2. Buka tab Application pada Chrome dan Edge, atau tab Storage pada Firefox.
  3. Pilih kategorinya: Local storage, Session storage, atau Cookies, lalu pilih situs yang ingin diperiksa.
  4. Lihat daftar kunci dan nilainya, beserta atribut seperti HttpOnly dan SameSite pada cookies.
  5. Edit atau hapus entri langsung dari tabel, atau gunakan opsi untuk membersihkan semuanya.

Kebiasaan ini sangat membantu saat debugging, misalnya untuk memastikan data tersimpan atau menguji perilaku aplikasi saat datanya kosong.

Kesalahan Umum Pemula

  • Menyimpan token login di local storage. Skrip jahat bisa membacanya jika ada celah XSS.
  • Lupa mengubah objek menjadi JSON, sehingga yang tersimpan hanya teks “[object Object]”.
  • Mengira data local storage ikut terkirim ke server. Tidak. Hanya cookies yang dikirim otomatis.
  • Menyimpan data penting hanya di sisi klien. Data bisa hilang kapan saja.
  • Menaruh terlalu banyak data di cookies. Setiap permintaan ikut membawanya dan memperlambat halaman.
  • Tidak memberi atribut keamanan pada cookie sesi. Padahal HttpOnly, Secure, dan SameSite sangat penting.
  • Tidak menangani kegagalan penyimpanan. Kuota penuh atau mode privat bisa membuat penulisan gagal.
  • Mengasumsikan sessionStorage dibagi antar tab. Setiap tab punya sendiri.

Mitos seputar Local Storage dan Cookies

  • “Local storage lebih aman daripada cookies.” Tidak otomatis. Cookie HttpOnly justru tidak bisa dibaca JavaScript, sedangkan local storage selalu bisa.
  • “Cookies sudah usang dan tidak dipakai lagi.” Masih sangat dipakai, terutama untuk sesi login.
  • “Data local storage terenkripsi.” Tidak. Datanya disimpan apa adanya dan bisa dilihat di DevTools.
  • “Session storage hilang saat halaman dimuat ulang.” Tidak. Ia baru hilang saat tab ditutup.
  • “Semua situs bisa membaca local storage-ku.” Tidak. Datanya terikat pada asal masing-masing.
  • “Kapasitas local storage tak terbatas.” Ada batas, sekitar beberapa megabita per asal.

Untuk panduan ngoding web lainnya, kunjungi NgodingDaily. Jika kamu masih membangun dasar, baca juga tips memahami logika pemrograman bagi pemula.

Pertanyaan tentang Local Storage, Session Storage, dan Cookies

Apa perbedaan local storage dan session storage?

Local storage menyimpan data sampai dihapus dan dibagi ke semua tab dari situs yang sama. Session storage hanya hidup selama tab terbuka dan terpisah di setiap tab.

Apa perbedaan local storage dan cookies?

Local storage tidak dikirim ke server dan berkapasitas lebih besar. Cookies dikirim otomatis di setiap permintaan, berukuran kecil, dan punya atribut keamanan.

Berapa kapasitas local storage?

Umumnya sekitar 5 MB per asal, tetapi bervariasi antar peramban. Cookies jauh lebih kecil, sekitar 4 KB per cookie.

Apakah local storage aman untuk menyimpan token login?

Tidak disarankan. JavaScript bisa membacanya, sehingga celah XSS dapat mencuri token. Gunakan cookie HttpOnly, Secure, dan SameSite untuk sesi login.

Kapan data session storage hilang?

Saat tab atau jendela ditutup. Data tetap ada saat halaman dimuat ulang.

Apakah cookies dikirim ke server?

Ya. Peramban menyertakan cookies yang cocok secara otomatis di setiap permintaan ke domain tersebut.

Apakah local storage bisa diakses situs lain?

Tidak. Datanya terikat pada asal, yaitu kombinasi protokol, domain, dan port.

Apa itu cookie HttpOnly?

Cookie yang tidak bisa dibaca oleh JavaScript, sehingga melindungi dari pencurian lewat serangan XSS.

Mana yang sebaiknya dipakai untuk menyimpan tema gelap?

Local storage, karena datanya perlu bertahan lama dan tidak perlu dikirim ke server.

Kesimpulan

Local storage, session storage, dan cookies punya peran berbeda. Local storage menyimpan data lama di peramban, session storage menyimpan data sementara per tab, dan cookies membawa data kecil ke server di setiap permintaan. Pilih berdasarkan masa hidup data, kebutuhan server, dan tingkat sensitivitasnya. Jangan menyimpan data sensitif di tempat yang bisa dibaca JavaScript, gunakan atribut keamanan pada cookies, dan jangan menjadikan data klien satu-satunya sumber kebenaran. Dengan pemahaman ini, aplikasi webmu lebih rapi, cepat, dan aman.

One Reply to “Local Storage, Session Storage, Cookies: 7 Perbedaan”

Leave a Reply

Your email address will not be published. Required fields are marked *