Seberapa gigih localStorage?

100

Saya sangat bergantung pada localStorage untuk plugin yang saya tulis. Semua pengaturan pengguna disimpan di dalamnya. Beberapa pengaturan memerlukan pengguna regex'es tulis dan mereka akan sedih jika aturan regex mereka hilang di beberapa titik. Jadi sekarang saya bertanya-tanya seberapa gigih localStorage itu.

Dari spesifikasi :

Agen pengguna harus menghentikan data dari area penyimpanan lokal hanya untuk alasan keamanan atau ketika diminta oleh pengguna.

Di atas sepertinya berfungsi seperti cookie di sisi klien. Yaitu ketika pengguna menghapus semua data browser (riwayat, cookie, cache, dll.) Penyimpanan lokal juga akan terpotong. Apakah asumsi ini benar?

PeeHaa
sumber
1
Menimbang bahwa browser dapat memutuskan apa yang merupakan "alasan keamanan", dalam dunia yang ideal Anda tidak akan berasumsi bahwa itu akan bertahan lama. Namun, mungkin aman untuk mengasumsikan bahwa ini tetap ada sampai pengguna secara eksplisit menghapusnya.
Corbin
1
Hanya satu peringatan saat menggunakan localStorage: Sepertinya tidak bekerja dengan andal di Firefox 39, 38 dan 37 (kami tidak memeriksa yang lebih lama). Pada sekitar 1% mesin pengguna kami, localStorage terkadang hilang di tengah penjelajahan situs kami, sementara cookie sesi dipertahankan. Sepertinya bug bagi saya.
Andreas
1
@PeeHaa, Ini tidak hanya berfungsi seperti cookie, tetapi secara hukum juga didefinisikan sebagai "cookie" . Faktanya, info penyimpanan ditampilkan tepat di samping cookie lain di urlchrome:settings/cookies
Pacerier

Jawaban:

69

Mozilla mengimplementasikannya seperti cookie:

Penyimpanan DOM dapat dihapus melalui "Tools -> Clear Recent History -> Cookies" ketika Rentang waktu adalah "Semuanya" (melalui nsICookieManager :: removeAll)

https://developer.mozilla.org/en/DOM/Storage

Dalam Penyimpanan DOM , tidak mungkin untuk menentukan periode kedaluwarsa untuk setiap data Anda. Semua aturan kedaluwarsa diserahkan kepada pengguna. Dalam kasus Mozilla, sebagian besar aturan tersebut diwarisi dari aturan kedaluwarsa terkait Cookie. Karena itu, Anda mungkin dapat mengharapkan sebagian besar data Penyimpanan DOM Anda bertahan setidaknya untuk jangka waktu yang berarti.

http://ejohn.org/blog/dom-storage/

Chrome mengimplementasikannya seperti cache:

LocalStorage bukanlah Penyimpanan Aman

Penyimpanan lokal HTML5 menyimpan data yang tidak dienkripsi dalam bentuk string di cache browser biasa .

Kegigihan

Di disk hingga dihapus oleh pengguna (hapus cache) atau oleh aplikasi

https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage


Adapun "pengganti Cookie", tidak seluruhnya

Cookie dan penyimpanan lokal benar-benar melayani tujuan yang berbeda. Cookie terutama untuk membaca sisi server, Penyimpanan Lokal hanya dapat dibaca di sisi klien. Jadi pertanyaannya adalah, di aplikasi Anda, siapa yang membutuhkan data ini - klien atau server?

Joseph
sumber
1
Saya rasa tautan MDN ini menjelaskan lebih jelas.
Bo Lu
17

Pada dasarnya, Anda tidak harus terlalu bergantung pada Penyimpanan Lokal.

Penyimpanan Lokal, bersama dengan Penyimpanan Sesi, bertujuan untuk menjadi pengganti cookie, yang mendefinisikan API yang lebih konsisten. Ada beberapa perbedaan dari cookie:

  • Sementara cookie dapat diakses dari sisi klien dan server, Penyimpanan Web, secara umum, dan Penyimpanan Lokal, pada khususnya, hanya dapat diakses dari sisi klien.
  • Kapasitas yang ditingkatkan (resmi untuk cookie adalah 4 KB) menjadi lebih dari 5MB per domain (Firefox, Google Chrome, dan Opera dan 10MB di IE).

Jadi ya , anggapan Anda benar.

Daniel Ribeiro
sumber
1
+1 - inilah mengapa saya menggunakan penyimpanan lokal sebagai cache dan mencadangkan data pengguna di server. (Tentu saja, itu mengasumsikan ada mekanisme login.)
josh3736
2
Basically, you should not heavily depend on Local Storage.... Tentu !!
Tenali Raman
7

Satu hal yang perlu diperhatikan tentang penggunaan penyimpanan lokal. Ini sangat spesifik peramban. Jika Anda menyimpan data dengan firefox, itu tidak akan tersedia di chrome atau ie dll. Juga sejauh membersihkan cookie dan sesi, saya perhatikan itu juga khusus browser, apakah penyimpanan lokal dihapus atau tidak. Saya akan melihat banyak detail jika Anda benar-benar berencana mengandalkan penyimpanan lokal untuk sebuah aplikasi.

Luke
sumber
14
Bukankah ini juga benar dengan cookie?
Jeffrey Sweeney
3
Ini juga berlaku untuk cookie.
Moshe L
Tidak, ini belum tentu benar untuk cookie: Di OSX, aplikasi yang menggunakan Webkit tampaknya membagikan Cookie menurut pengalaman saya. Meskipun saya mungkin salah menafsirkan efek.
Thomas Tempelmann
Di sisi lain, dia sedang menulis sebuah plugin yang, saya asumsikan, khusus untuk browser.
GuyT
5

Penyimpanan Lokal dirancang untuk menjadi penyimpanan data yang andal dan persisten pada klien. Ini tidak dirancang sebagai "cookie yang lebih baik": fungsi itu dirancang untuk dipenuhi oleh Penyimpanan Sesi.

Dari Rekomendasi Kandidat Spesifikasi Penyimpanan Web Desember 2011 ,

(Penyimpanan Lokal) dirancang untuk penyimpanan yang mencakup beberapa jendela, dan bertahan di luar sesi saat ini. Secara khusus, aplikasi Web mungkin ingin menyimpan megabyte data pengguna, seperti seluruh dokumen yang dibuat oleh pengguna atau kotak surat pengguna, di sisi klien untuk alasan kinerja.

Sebagai data sisi klien - itu adalah gigih seperti setiap data sisi klien, dalam batas-batas ukuran bahwa alat browser. Pengguna dapat menghapusnya kapan saja, membukanya di editor teks dan mengedit, dll. - seperti data sisi klien APA PUN.

Michael Mullany
sumber
1
Mungkin ini telah berubah sejak posting asli Anda 8 tahun yang lalu, tetapi Penyimpanan Lokal dapat sangat banyak digunakan sebagai pengganti cookie (di mana hanya akses sisi klien diperlukan). Penyimpanan Sesi tidak bisa. Penyimpanan Sesi dihapus segera setelah browser ditutup.
Brad
3

Jika Anda menggunakan localStorage untuk aplikasi iOS, berhati-hatilah. Versi terbaru dari iOS (5.1 off the top of my head) telah memindahkan data penyimpanan lokal dan localdb ke bagian cache yang secara teratur dibersihkan, yaitu sama sekali tidak persisten. Saya belum tahu apakah ini bug atau perubahan kebijakan.

Wytze
sumber
2
Saya yakin ini benar untuk WebView tetapi tidak untuk Safari.
Trott