Насколько устойчиво localStorage?

102

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

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

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

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

PeeHaa
источник
1
Учитывая, что браузеры должны решать, что является «причиной безопасности», в идеальном мире вы не предполагаете, что это будет длиться очень долго. Однако, вероятно, можно с уверенностью предположить, что он сохраняется до тех пор, пока пользователь явно не очистит его.
Corbin
1
Только одно предупреждение при использовании localStorage: похоже, он не работает надежно в Firefox 39, 38 и 37 (мы не проверяли ничего более старого). Примерно на 1% компьютеров наших пользователей localStorage иногда теряется в середине просмотра нашего сайта, в то время как cookie сеанса сохраняется. Мне кажется, что это ошибка.
Андреас
1
@PeeHaa, Он не просто работает как файлы cookie, но также юридически определяется как "файлы cookie" . Фактически, информация о хранилище отображается рядом с другими файлами cookie в URL- chrome:settings/cookies
адресе

Ответы:

69

Mozilla реализует это как файлы cookie:

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

https://developer.mozilla.org/en/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 объяснила более ясно.
Бо Лу
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, они не будут доступны в Chrome или т. Д. Также, что касается очистки файлов cookie и сеансов, я заметил, что это также зависит от браузера в отношении того, очищено ли локальное хранилище. Я бы подробно рассмотрел детали, если вы действительно планируете полагаться на локальное хранилище для приложения.

Люк
источник
14
Разве это не верно и для файлов cookie?
Джеффри Суини,
3
Это верно и для файлов cookie.
Моше Л.
Нет, это не обязательно верно для файлов cookie: на OSX приложения, использующие Webkit, по моему опыту, используют файлы cookie. Хотя я могу неправильно интерпретировать эффекты.
Томас Темпельманн
С другой стороны, он пишет плагин, который, как я полагаю, зависит от браузера.
GuyT
5

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

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

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

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

Майкл Маллани
источник
1
Возможно, это изменилось с момента вашего исходного сообщения 8 лет назад, но локальное хранилище может очень сильно использоваться в качестве замены файлов cookie (где требуется доступ только на стороне клиента). Сессионное хранилище не может. Хранилище сеансов удаляется, как только браузер закрывается.
Брэд,
3

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

Wytze
источник
2
Я считаю, что это верно для WebViews, но не для Safari.
Тротт