Web Storage (localStorage Fokus)
Pelajari cara menyimpan data di browser pengguna menggunakan Web Storage API (fokus localStorage, singgung sessionStorage) dan ketahui alternatif canggih seperti IndexedDB.
Biar Gak Lupa: Nyimpen Data di Browser Pake Web Storage!
Udah bisa bikin halaman web interaktif pake JavaScript? Keren! Tapi, gimana kalau kamu pengen nyimpen sedikit data di browser pengguna biar gak ilang pas halamannya di-refresh atau bahkan pas browsernya ditutup terus dibuka lagi? Misalnya, nyimpen preferensi tema (dark/light mode), skor tertinggi game sederhana, atau daftar tugas yang belum selesai.
Dulu, orang sering pake cookies buat nyimpen data kecil di browser. Tapi cookies punya beberapa keterbatasan (ukuran kecil, dikirim terus ke server tiap request). Nah, HTML5 ngenalin solusi yang lebih modern dan gampang buat nyimpen data di sisi klien (browser): Web Storage API.
Web Storage API ini nyediain dua mekanisme utama yang mirip cara kerjanya, tapi beda di "masa hidup" datanya:
localStorage
: Nyimpen data tanpa batas waktu kadaluarsa. Data tetep ada meskipun browser ditutup dan dibuka lagi. Ini yang bakal jadi fokus utama kita di panduan ini dan di proyek To-Do List.sessionStorage
: Nyimpen data cuma buat satu sesi browser aja. Pas tab atau jendela browser ditutup, datanya ilang.
Selain Web Storage, ada juga solusi penyimpanan sisi klien yang lebih canggih buat data yang lebih besar atau kompleks, namanya IndexedDB, yang akan kita singgung sedikit di akhir.
Yuk, kita dalemin dulu si localStorage
!
localStorage
: Si Penyimpan Data Jangka Panjang (di Browser)
localStorage
adalah bagian dari Web Storage API yang ngebolehin kamu nyimpen data dalam bentuk pasangan key-value
(kunci-nilai) secara lokal di browser pengguna.
- Data Disimpen per Origin: Data
localStorage
itu spesifik buat satu origin (kombinasi protokol, domain, dan port). Artinya, websiteA.com
gak bisa bacalocalStorage
dariB.com
, begitu juga sebaliknya. Ini penting buat keamanan. - Kapasitas Lebih Besar dari Cookies:
localStorage
biasanya bisa nyimpen data sekitar 5MB sampe 10MB per origin (tergantung browser), jauh lebih gede dari cookies (sekitar 4KB). - Gak Dikirim Otomatis ke Server: Beda sama cookies, data di
localStorage
gak otomatis dikirim bareng tiap HTTP request ke server. Ini bikin request jadi lebih enteng. - Data Harus String:
localStorage
cuma bisa nyimpen nilai dalam bentuk string. Kalau kamu mau nyimpen objek atau array, kamu harus "ngubah" (serialize) dulu jadi string JSON, terus pas mau dipake, "ubah balik" (parse) lagi jadi objek/array.
Jurus-Jurus Dasar localStorage
localStorage
itu objek global yang bisa kamu akses langsung di JavaScript-mu. Dia punya beberapa metode (fungsi) simpel:
-
localStorage.setItem('kunci', 'nilai')
: Buat nyimpen atau ngupdate data.'kunci'
: Nama kunci (string) buat ngidentifikasi datamu.'nilai'
: Data yang mau kamu simpen (harus string).
javascript localStorage.setItem('namaPengguna', 'Budi'); localStorage.setItem('skorTertinggi', '1500'); // Disimpen sebagai string "1500"
-
localStorage.getItem('kunci')
: Buat ngambil atau ngebaca data.- Ngembaliin nilai data (selalu string) atau
null
kalau kuncinya gak ada.
javascript let nama = localStorage.getItem('namaPengguna'); // "Budi"
- Ngembaliin nilai data (selalu string) atau
-
localStorage.removeItem('kunci')
: Buat ngapus satu item data.javascript localStorage.removeItem('skorTertinggi');
-
localStorage.clear()
: Buat ngapus SEMUA data dilocalStorage
buat origin website itu. Hati-hati!
(Ada juga localStorage.length
dan localStorage.key(index)
tapi lebih jarang dipake).
Nyimpen Objek atau Array di localStorage
(Pake JSON)
Karena localStorage
cuma bisa nyimpen string, kita pake JSON.stringify()
buat ngubah objek/array jadi string sebelum disimpen, dan JSON.parse()
buat ngubah string balik jadi objek/array pas diambil.
let preferensi = { tema: 'dark', notif: true };
localStorage.setItem('settingUser', JSON.stringify(preferensi)); // Simpen sebagai string
let dataSettingString = localStorage.getItem('settingUser');
if (dataSettingString) {
let settingObjek = JSON.parse(dataSettingString); // Ubah balik jadi objek
console.log(settingObjek.tema); // Output: dark
}
Ini teknik yang super penting dan sering banget dipake!
sessionStorage
: Si Penyimpan Data Sesi Sesaat
Selain localStorage
, ada juga "saudaranya" yaitu sessionStorage
.
-
Cara Pakenya SAMA PERSIS kayak
localStorage
: Dia punya metodesetItem()
,getItem()
,removeItem()
, danclear()
yang fungsinya identik.javascript sessionStorage.setItem('infoSesi', 'Ini data cuma buat sesi ini'); let dataSesi = sessionStorage.getItem('infoSesi'); console.log(dataSesi);
-
Perbedaan Utama: Masa Hidup Data:
- Data yang kamu simpen di
sessionStorage
cuma bakal bertahan selama sesi browser itu aktif. - Satu "sesi" itu biasanya berarti satu tab atau satu jendela browser. Kalau kamu buka link di tab baru, tab baru itu bakal punya
sessionStorage
-nya sendiri yang kosong (gak nge-share sama tab asal). - Pas kamu nutup tab atau jendela browser itu, semua data
sessionStorage
buat sesi itu bakal otomatis ilang. Beda samalocalStorage
yang datanya tetep ada.
- Data yang kamu simpen di
-
Kapan Pake
sessionStorage
?- Buat nyimpen data sementara yang cuma relevan buat interaksi pengguna di satu tab/jendela itu aja dan gak perlu diinget jangka panjang atau di-share antar tab.
- Contoh:
- Status input form yang panjang biar gak ilang kalau gak sengaja ke-refresh (tapi kalau tab ditutup ya ilang).
- State sementara aplikasi yang gak perlu persistensi antar sesi (misal, filter yang lagi aktif di halaman daftar produk).
- Keranjang belanja sebelum checkout (meskipun
localStorage
kadang lebih disukai biar gak ilang kalau browser gak sengaja ketutup).
Secara umum, kalau kamu butuh data yang "awet" meskipun browser ditutup, pilih localStorage
. Kalau datanya cuma buat "sekarang aja" di tab itu, sessionStorage
bisa jadi pilihan.
Sekilas Tentang Penyimpanan yang Lebih Canggih: IndexedDB
Web Storage (localStorage
dan sessionStorage
) itu bagus banget buat data string key-value yang simpel dan ukurannya gak terlalu gede (sekitar 5-10MB). Tapi, gimana kalau kamu butuh:
- Nyimpen data yang jauh lebih besar?
- Nyimpen data terstruktur yang kompleks (bukan cuma string)?
- Kemampuan buat nyari (query) data pake indeks biar cepet?
- Nanganin transaksi data?
Nah, buat kebutuhan yang lebih canggih ini, browser nyediain API lain yang namanya IndexedDB.
- IndexedDB itu sistem database NoSQL berbasis objek yang ada di dalem browser.
- Dia bisa nyimpen data yang jauh lebih gede dan kompleks.
- Dia asinkron, jadi operasinya gak ngeblok thread utama browser (beda sama
localStorage
yang operasinya sinkron). - Learning curve-nya jauh lebih tinggi dibanding Web Storage. Pake IndexedDB langsung itu lumayan ribet. Makanya, banyak developer pake library pembungkus (wrapper) buat nggampangin kerja sama IndexedDB (misal,
idb
dari Jake Archibald, atau Dexie.js).
Buat sekarang, kamu cukup tau aja kalau IndexedDB itu ada sebagai solusi penyimpanan sisi klien yang lebih powerful kalau localStorage
udah gak cukup. Untuk sebagian besar kasus data preferensi atau state aplikasi sederhana, localStorage
udah oke banget.
Kapan Sebaiknya Pake Web Storage (dan Kapan Jangan)?
Cocok buat:
- Nyimpen preferensi pengguna yang simpel (misal, tema, bahasa, setting tampilan).
- Nyimpen state aplikasi sederhana biar gak ilang pas refresh (kayak daftar To-Do di contoh kita nanti).
- Caching data API yang gak terlalu sering berubah buat ngurangin request ke server.
- Data sementara yang gak kritikal.
Kurang Cocok (atau JANGAN DIPAKE) buat:
- Data Sensitif Banget: Kayak password, token autentikasi yang sangat rahasia, info kartu kredit.
localStorage
/sessionStorage
itu bisa diakses sama skrip JavaScript apa pun yang jalan di domain yang sama, jadi kalau ada skrip jahat (XSS), datanya bisa dicuri. - Data yang Sangat Besar atau Kompleks Banget: Pertimbangkan IndexedDB.
- Data yang Butuh Integritas Tinggi atau Relasi Kompleks: Web Storage itu cuma key-value store simpel.
Ngintip Isi Web Storage di Browser DevTools
Kamu bisa dengan gampang liat, nambah, ngedit, atau ngapus data localStorage
dan sessionStorage
langsung dari Browser Developer Tools:
- Buka DevTools (F12 atau klik kanan > Inspect).
- Cari tab
Application
(di Chrome/Edge) atauStorage
(di Firefox). - Di panel samping, di bawah "Storage", kamu bakal nemu "Local Storage" dan "Session Storage". Klik domain websitemu, dan kamu bisa liat semua data key-value yang tersimpan.
Google Chrome Local Storage
Firefox Local Storage
Keduanya itu sama aja, cuma tampilannya beda.
Ini berguna banget buat debugging atau sekadar pengen tau data apa aja yang disimpen sama website tertentu.
Web Storage (khususnya localStorage
yang bakal kita pake) ini alat yang praktis banget buat nambahin sedikit "memori" ke aplikasi web frontend-mu. Dengan ngerti cara nyimpen, ngambil, dan ngapus data, plus trik JSON.stringify/parse
buat objek/array, kamu jadi punya satu lagi jurus ampuh di gudang skill JavaScript-mu!
Ini bakal kepake banget pas kita bikin Proyek Mini To-Do List nanti!
Kuis Web Storage (localStorage & sessionStorage)
Pertanyaan 1 dari 5
Apa perbedaan utama antara `localStorage` dan `sessionStorage` dalam Web Storage API?