Cookie, Local Storage, dan IndexedDB: Apa Sebenarnya Sebuah Sesi

Masuk menulis ke tiga tempat terpisah. Mengetahui mana yang mana menjelaskan mengapa sesi bertahan dalam beberapa hal, rusak pada hal lain, dan mengapa menyinkronkan profil harus memindahkan ketiganya.
"Sedang login" terasa seperti satu hal. Sebenarnya setidaknya tiga, tersimpan di tiga tempat berbeda dengan tiga masa berlaku berbeda, dan perbedaan itu menjelaskan sebagian besar perilaku membingungkan yang ditemui orang saat memindahkan sesi antar mesin.
Cookie
Pasangan kunci-nilai kecil, dikirim otomatis bersama setiap permintaan ke situs yang menetapkannya. Di sinilah token sesi biasanya berada.
- Dibatasi pada domain dan path, dengan tanggal kedaluwarsa.
- Cookie `Secure` hanya dikirim lewat HTTPS; cookie `HttpOnly` tidak terlihat oleh JavaScript halaman.
- Cookie sesi tidak punya kedaluwarsa dan dimaksudkan lenyap saat browser ditutup.
Cookie adalah yang terkecil dari ketiganya dan yang paling menanggung beban. Kehilangan cookie, dan Anda keluar.
Local Storage dan Session Storage
Penyimpanan kunci-nilai berupa string, dibaca dan ditulis oleh JavaScript halaman, dibatasi per origin. Tidak pernah dikirim bersama permintaan. Halaman harus membacanya dengan sengaja.
Aplikasi menyimpan preferensi, detail profil yang di-cache, feature flag, dan sering kali refresh token di sini. Local Storage bertahan sampai dihapus; Session Storage hanya selama tab ada.
IndexedDB
Basis data sungguhan di browser: rekaman terstruktur, indeks, transaksi. Di sinilah aplikasi web modern menyimpan apa pun yang substansial: riwayat pesan yang di-cache, antrean offline, kunci enkripsi untuk fitur terenkripsi ujung ke ujung.
Mengapa ini penting untuk profil
Ini memberi "isolasi" makna yang tepat. Dua profil terisolasi bila ketiganya terpisah, ditambah cache dan status ekstensi. Alat yang mengisolasi cookie namun berbagi IndexedDB telah mengisolasi sepertiga masalah yang mudah.
Ini juga menetapkan standar untuk memindahkan profil antar mesin. Membawa cookie saja mereproduksi bentuk sesi tanpa isinya.
| Penyimpanan | Ditulis oleh | Biasanya berisi |
|---|---|---|
| Cookie | Server dan skrip halaman | Token sesi, preferensi, pengenal pelacakan |
| Local Storage | Skrip halaman | Refresh token, status UI, detail profil yang di-cache |
| Session Storage | Skrip halaman | Status per tab, dibuang saat tab ditutup |
| IndexedDB | Skrip halaman | Data yang di-cache, antrean offline, kunci enkripsi |
Memindahkan sesi antar mesin Anda sendiri
PowerOps menangkap cookie, Local Storage, dan IndexedDB saat profil ditutup dan memulihkannya saat dibuka di tempat lain. Setiap kategori adalah sakelar, untuk seluruh workspace atau satu profil, sehingga Anda dapat memindahkan persis sebanyak yang Anda maksudkan.
Dua properti layak diketahui tentang cara kerjanya:
- Snapshot dienkripsi di mesin asalnya, dengan kunci milik workspace, dan didekripsi di mesin yang membuka profil. Ini bukan enkripsi ujung ke ujung: layanan menyimpan salinan kunci itu agar komputer Anda yang lain dapat menerimanya.
- Profil terbuka di satu mesin pada satu waktu. Selama terbuka, ia memegang lease, dan perangkat lain diberi tahu perangkat mana yang memegangnya, bukan dibiarkan memecah sesi menjadi dua salinan yang menyimpang.
Poin kedua itu adalah keterbatasan yang disengaja. Dua mesin yang mengedit satu sesi secara independen menghasilkan dua sesi setengah valid dan, cukup sering, akun yang keluar di keduanya. Wadah cookie tidak punya cara menyelesaikan konflik penggabungan.
Kesimpulan praktisnya
Tutup profil, jangan dimatikan paksa. Penulisan saat ditutup itulah yang membuat sesi portabel, dan itu kebiasaan termurah dalam daftar ini.

