Насколько устойчив локальное хранилище? - PullRequest
92 голосов
/ 30 марта 2012

Я сильно зависит от localStorage для плагина, который я пишу.Все настройки пользователя хранятся в нем.Некоторые настройки требуют от пользователя записи регулярных выражений, и они будут огорчены, если в какой-то момент их правила регулярных выражений пропадут.Так что теперь мне интересно, насколько постоянным является localStorage.

Из спецификации :

Пользовательские агенты должны истекать данные из локальных областей хранения только в целях безопасностипо причинам или по запросу пользователя.

Вышеприведенное выглядит так, как будто оно работает так же, как файлы cookie на стороне клиента.Т.е. когда пользователь очищает все данные браузера (историю, куки, кеш и т. Д.), LocalStorage также будет усечен.Это предположение верно?

Ответы [ 5 ]

64 голосов
/ 30 марта 2012

Mozilla реализует его как куки:

Хранилище DOM можно очистить с помощью «Инструменты -> Очистить недавнюю историю -> Файлы cookie», если диапазон времени «Все» (через nsICookieManager :: removeAll)

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

В DOM Storage невозможно указать срок действия любых ваших данных.Все правила истечения остаются на усмотрение пользователя.В случае с Mozilla большинство этих правил наследуются от правил истечения срока действия, связанных с Cookie. Из-за этого вы, вероятно, можете ожидать, что большинство ваших данных DOM Storage будут работать как минимум сколько-нибудь значимое время.

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

Chrome реализует его как кеш:

LocalStorage не является безопасным хранилищем

локальное хранилище HTML5сохраняет данные в незашифрованном виде в виде строки в обычном кеше браузера .

Постоянство

На диске до тех пор, пока пользователь не удалит их (удалить кеш) илиapp

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


Что касается «замены для Cookie», не совсем

Cookiesи локальное хранилище действительно служит разным целям.Cookie-файлы предназначены главным образом для чтения на стороне сервера, LocalStorage может быть прочитан только на стороне клиента.Поэтому вопрос в вашем приложении, кому нужны эти данные - клиент или сервер?

16 голосов
/ 30 марта 2012

По сути, вы должны не сильно зависеть от локального хранилища.

Локальное хранилище, наряду с хранилищем сеансов, предназначено для замены файлов cookie, определяя более согласованный API. Есть несколько отличий от файлов cookie:

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

Итак да , ваше предположение верно.

6 голосов
/ 30 марта 2012

Об использовании локального хранилища. Это очень специфично для браузера. Если вы храните данные с помощью Firefox, они не будут доступны в Chrome или т. Д. Также, что касается очистки файлов cookie и сеансов, я заметил, что это также зависит от браузера, очищается ли локальное хранилище. Я бы очень подробно изучил детали, если вы действительно планируете полагаться на локальное хранилище для приложения.

4 голосов
/ 31 марта 2012

Локальное хранилище предназначено для надежного постоянного хранения данных на клиенте. Он не разработан как «лучший файл cookie»: эта функция предназначена для Session Storage.

Из декабрь 2011 г. Рекомендация кандидата на спецификацию веб-хранилища ,

(локальное хранилище) предназначено для хранилища, которое охватывает несколько окон, и длится после текущей сессии. В частности, веб-приложения может пожелать хранить мегабайты пользовательских данных, таких как целые пользовательские документы или почтовый ящик пользователя на стороне клиента для причины производительности.

Как данные на стороне клиента - они такие же постоянные, как любые данные на стороне клиента, в пределах ограничений по размеру, которые реализует браузер. Пользователи могут удалить его в любое время, открыть его в текстовом редакторе, отредактировать и т. Д., Как ЛЮБЫЕ данные на стороне клиента.

2 голосов
/ 14 апреля 2012

Если вы используете localStorage для приложения для iOS, будьте очень осторожны. Последняя версия iOS (5.1 вне пределов моей головы) переместила данные localalstorage и localdb в часть кеша, которая регулярно очищается, то есть не является постоянной. Я пока не могу сказать, является ли это ошибкой или изменением политики.

...