Наскільки стійким є localStorage?


100

Я дуже залежно від localStorage для плагіна, про який пишу. У ньому зберігаються всі налаштування користувача. Деякі параметри вимагають, щоб користувач писав regex'es, і їм було б сумно, якщо в якийсь момент їх правила регулярного виведення зникли. Тож зараз мені цікаво, наскільки наполегливий місцевий сховище.

З специфікацій :

Користувацькі агенти повинні закінчувати термін дії даних з локальних областей зберігання лише з міркувань безпеки або на запит користувача.

Наведене вище виглядає так, як це працює так само, як куки на стороні клієнтів. Тобто, коли користувач очистить усі дані браузера (історію, файли cookie, кеш і т. Д.), Локальне зберігання також буде усічене. Чи правильно це припущення?


1
Враховуючи, що браузери вирішують, що є "причиною безпеки", в ідеальному світі ви не вважаєте, що це триватиме дуже довго. Однак, мабуть, можна припустити, що воно зберігається, поки користувач явно не змиє його.
Корбін

1
Лише одне попередження при використанні localStorage: Схоже, він не працює надійно у Firefox 39, 38 та 37 (ми не перевіряли нічого старшого). На приблизно 1% машин нашого користувача місцевий сховище іноді втрачається посеред перегляду нашого сайту, в той час як cookie сеансу зберігається. Мені це здається клопом.
Андреас

1
@PeeHaa, це не просто працює як файли cookie, але юридично визначається також як "cookie" . Насправді інформація про зберігання відображається поряд із іншими файлами cookie в URLchrome:settings/cookies
адресі

Відповіді:


69

Mozilla реалізує це як файли cookie:

Зберігання DOM можна очистити за допомогою "Інструменти -> Очистити нещодавню історію -> Файли cookie", коли для діапазону часу встановлено значення "Все" (за допомогою nsICookieManager :: removeAll)

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

У DOM Storage не можна вказати термін придатності для будь-яких ваших даних. Усі правила закінчення терміну дії залишаються за користувачем. У випадку з Mozilla більшість цих правил успадковуються від правил закінчення терміну дії файлів cookie. Через це ви, напевно, можете очікувати, що більшість даних DOM-накопичувача триватимуть хоча б значну кількість часу.

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

Chrome реалізує це як кеш:

LocalStorage - це не безпечне сховище

Локальне сховище HTML5 зберігає незашифровані дані у вигляді рядків у звичайному кеші браузера .

Наполегливість

На диску, доки користувач не видалить (видалити кеш) або програмою

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


Що стосується "заміни Cookie", не зовсім

Файли cookie та локальне зберігання дійсно служать різним цілям. Файли cookie призначені в першу чергу для читання на стороні сервера, LocalStorage можна читати лише на стороні клієнта. Тож питання у вашому додатку, кому потрібні ці дані - клієнту чи серверу?


1
Я думаю, що це посилання MDN пояснилося більш зрозумілим.
Bo Lu

17

В основному, ви не повинні сильно залежати від локального зберігання.

Місцеве сховище, поряд із сховищем сеансів, має на меті замінити файли cookie, визначаючи більш послідовний API. Існує кілька відмінностей у файлах cookie:

  • Хоча файли cookie доступні як з боку клієнта, так і з боку сервера, веб-сховище, загалом, і локальне сховище, зокрема, доступні лише з боку клієнта.
  • Підвищена ємність (офіційна кількість файлів cookie становить 4 КБ) до понад 5 МБ на домен (Firefox, Google Chrome і Opera, а також 10 МБ в IE).

Так що так , ваше припущення правильне.


1
+1 - ось чому я б використовував локальне сховище як кеш-пам’ять та резервне копіювання даних користувача на сервері. (Звичайно, це передбачає наявність механізму входу в систему.)
josh3736

2
Basically, you should not heavily depend on Local Storage.... Абсолютно !!
Теналі Раман

7

Одне слід зазначити щодо використання локального сховища. Це дуже специфічно для браузера. Якщо ви зберігаєте дані за допомогою firefox, вони не будуть доступні в хромі, тобто т.п. Крім того, що стосується очищення файлів cookie та сеансів, я помітив, що це також особливості браузера щодо того, чи очищено місцевий сховище чи ні. Я б детально розібрався в деталях, якщо ви дійсно плануєте покладатися на локальне сховище програми.


14
Чи не так це і з файлами cookie?
Джеффрі Суїні,

3
Це стосується і файлів cookie.
Moshe L

Ні, це не обов'язково стосується файлів cookie: На OSX програми, які використовують Webkit, на моєму досвіді, обмінюються файлами cookie. Хоча я, можливо, неправильно трактую ефекти.
Томас Темпельманн

З іншого боку, він пише плагін, який, я припускаю, є специфічним для браузера.
Гай

5

Локальне сховище розраховане на надійне і стійке зберігання даних про клієнта. Він не розроблений як "кращий файл cookie": ця функція призначена для задоволення Session Storage.

З Рекомендації щодо кандидата в Інтернет-сховища за грудень 2011 року ,

(Місцеве зберігання) призначений для зберігання, яке охоплює кілька вікон, і триває понад поточний сеанс. Зокрема, веб-додатки, можливо, захочуть зберігати мегабайти даних користувачів, наприклад, цілі документи, що належать користувачеві, або поштову скриньку користувача, з боку клієнта з міркувань продуктивності.

Як дані на стороні клієнта - вони такі ж постійні, як і будь-які дані на стороні клієнта, в межах розміру, який реалізує браузер. Користувачі можуть видалити його в будь-який час, відкрити його в текстовому редакторі та редагувати тощо - як і БУДЬ-які дані клієнтської сторони.


1
Можливо, це змінилося з часу Вашої оригінальної публікації 8 років тому, але Local Storage може дуже сильно використовуватись як заміна файлів cookie (там, де потрібен лише доступ на стороні клієнта). Зберігання сеансу не може. Зберігання сеансів видаляється, як тільки браузер закривається.
Бред

3

Якщо ви використовуєте localStorage для програми iOS, будьте дуже обережні. Остання версія iOS (5,1 вгорі голови) перемістила дані локального зберігання та localdb в частину кешу, яка регулярно очищається, тобто зовсім не є стійкою. Поки не можу сказати, чи це помилка, чи зміна політики.


2
Я вважаю, що це стосується WebViews, але не для Safari.
Тротт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.