Очистить локальное хранилище html5 на определенной странице

Введение

LocalStorage и sessionStorage, часть API веб-хранилища, – это два отличных инструмента для локального хранения пар ключ/значение.

Использование localStorage и sessionStorage для хранения данных является альтернативой использованию cookies и имеет ряд преимуществ:

  • Данные сохраняются только локально и не могут быть прочитаны сервером, что устраняет проблему безопасности cookies.
  • Благодаря этому вы сможете сохранить гораздо больше данных (10 МБ для большинства браузеров).
  • Простой синтаксис.

Он также совместим со всеми современными браузерами, поэтому вы можете использовать его уже сегодня без каких-либо проблем.

Cookies по-прежнему полезны, особенно когда речь идет об аутентификации, но бывают случаи, когда localStorage или sessionStorage могут быть лучшей альтернативой.

Создание, чтение и обновление записей

Вы можете создавать записи для localStorage с помощью метода setItem().

Метод setItem() принимает два аргумента, ключ и соответствующее значение:

Чтобы прочитать записи, используйте метод getItem()

Метод getItem() принимает аргумент, который должен быть ключом.

Эта функция вернет соответствующее значение в виде строки:

Этот код присваивает myItem значение ‘Value’, которое является соответствующим параметром для ключа.

Обновление элемента выполняется с помощью метода setItem().

Опять же, необходимы два аргумента. Аргумент key будет существующим ключом, а аргумент value – новым значением:

Теперь значением ключа localStorage будет ‘New Value’ вместо ‘Value’.

Вы можете создавать, читать и обновлять записи в объекте localStorage

Вы также можете удалять отдельные записи и удалять все записи в формате localStorage

Full visibility into production React apps

try LogRocket

LogRocket is like a DVR for web apps, recording literally everything that happens on your React app. Instead of guessing why problems happen, you can aggregate and report on what state your application was in when an issue occurred. LogRocket also monitors your app’s performance, reporting with metrics like client CPU load, client memory usage, and more.

The LogRocket Redux middleware package adds an extra layer of visibility into your user sessions. LogRocket logs all actions and state from your Redux stores.

Modernize how you debug your React apps — start monitoring for free.

Summary

Web storage objects and allow to store key/value in the browser.

  • Both and must be strings.
  • The limit is 5mb+, depends on the browser.
  • They do not expire.
  • The data is bound to the origin (domain/port/protocol).
Shared between all tabs and windows with the same origin Visible within a browser tab, including iframes from the same origin
Survives browser restart Survives page refresh (but not tab close)

API:

  • – store key/value pair.
  • – get the value by key.
  • – remove the key with its value.
  • – delete everything.
  • – get the key number .
  • – the number of stored items.
  • Use to get all keys.
  • We access keys as object properties, in that case event isn’t triggered.

Storage event:

  • Triggers on , , calls.
  • Contains all the data about the operation (), the document and the storage object .
  • Triggers on all objects that have access to the storage except the one that generated it (within a tab for , globally for ).

localStorage vs cookies

и используются для хранения информации в браузере.

Но что лучше использовать в том или ином случае? Чтобы в этом вопросе ориентироваться необходимо знать различия между ними:

  • по месту хранения (куки и хранятся на компьютере пользователя в браузере);
  • по размеру (cookies ограничены 4 Кбайт, а localStorage – 5 Мбайт);
  • по включению этих данных в HTTP-заголовок (куки в отличие от данных локального хранилища включаются в состав запроса при отправке его на сервер, а также сервер их может добавлять в ответ при отправке его клиенту; таким образом cookies являются частью HTTP-протокола, и увеличивают объём передаваемых данных от клиента серверу и обратно);
  • по доступности данных (печеньки можно прочитать и установить как на сервере, так и на клиенте; на клиенте доступны все куки, кроме тех, у которых установлен флаг ; доступен только в браузере посредством JavaScript API;
  • по времени хранения данных (куки хранятся ограниченное время (до конца сеанса или истечения указанной даты), нахождение данных в локальном хранилище не ограничено по времени);
  • по удобству использования в JavaScript (работа с в JavaScript организовано намного удобнее чем с );
  • по необходимости информирования пользователей Евросоюза (при использовании cookies сайт в ЕС должен получать на это разрешение от пользователей; для данных локального хранилища это не требуется);
  • по назначению (куки в основном используются для управления сеансом, персонализации и отслеживания действий пользователя, в то время как применяется в качестве обычного локального хранилища информации на компьютере пользователя).

Что использовать: или ? На самом деле, ответ на этот вопрос очень прост. Если данные нужны на стороне сервера, то в этом случае лучше использовать . Т.к. куки отправляются с каждым HTTP-запросом на сервер, а также их там можно установить (они добавляются в ответ и браузер при его получении их сохранит).

Если вы работаете с данными только на клиенте (в браузере), то тогда более предпочтительно использовать .

Интегрируем локальное хранилище

Сейчас мы добавим немного функционала в наше приложение. Во первых, каждый раз, когда форму будут сабмитить, значение из  будет добавлено в  вместе с мгновенным отображением в списке задач. Также, нам нужно будет пробежаться циклом по всему локальному хранилищу и показать элементы этого хранилища сверху списка существующих задач. Ну и под конец, мы добавим кнопку “Clear All”, которая удалит все элементы не только из локального хранилища, но и из списка .

Давайте сначала создадим пустой массив и создадим в  ключ под названием .  в виде значений ключей принимает только строки, к тому же, нам надо хранить задачи в массиве.

Мы можем обойти это ограничение с помощью , чтобы конвертировать массив в строку. А уже потом мы применим  для конвертирования содержимого  в какой-нибудь рабочий формат, который мы положим в переменную . Вставьте этот код под всем, что мы написали выше.

В слушателе событий мы будем отправлять каждое новое значение  в массив, а затем добавлять в  новое значение с уже обновленным массивом.

Далее, мы собираемся пробежаться по всему содержимому переменной , которая содержит всё из нашего  в таком виде, в котором мы можем работать с этими данным в JavaScript. Затем мы заново запустим . Это покажет нам всю нужную информацию в списке при каждом открытии приложения.

И под конец мы добавим событие по клику на кнопку, которая очистит все данные из  и удалит все потомков у .

Если всё пройдет хорошо, то данные запишутся в хранилище и покажутся в списке задач, а само хранилище вы сможете проверить введя  в консоли.

Но у нас осталась последняя проблема. После закрытия браузера или перезагрузки страницы, вся существующая информация в  пропадает и ничего не остается на нашем фронте. Почему?

Потому, что наш  сбрасывается каждый раз при запуске скрипта. Мы можем пофиксить эту проблемку, создав условие, которое проверит наличие доступного :

Практичнее было бы использовать тернарный оператор.

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

Problems accessing localStorage for an SSR application

When working with a framework like Next.js that executes code on the server side, using produces an error stating, “window is not defined.”

The as used in our code is a built-in property of the object, . In our code, we ignored the while accessing the because it’s a global object; we can choose to include the object because it’s optional.

Now, this object is not available on the server side but rather the client side/browser, which prompts the error. To fix the error on the server side, check whether the object is defined. This way, our code only runs on the environment where the is available.

Open the file and update the function so you have the following:

function getStorageValue(key, defaultValue) {
  // getting stored value
  if (typeof window !== "undefined") {
    const saved = localStorage.getItem(key);
    const initial = saved !== null ? JSON.parse(saved) : defaultValue;
    return initial;
  }
}

Don’t forget that we’ve also used the inside the Hook in the file. But in this case, the is safe because the Hook only runs on the client side, where we have access to the object.

Test the project to ensure everything still works as expected.

Что такое веб-хранилище

В веб-хранилище хранятся данные пользователя браузера. Есть два типа веб-хранилищ:

 — это данные, которые хранятся бессрочно и будут доступны даже после перезагрузки браузера.

— это данные, которые стираются после того, как окно браузера закрывается.

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

До этого, для запоминания такого рода локальных, временных данных, использовались только кукисы. В локальном веб-хранилище вы можете хранить значительно больше данных (5MB vs 4KB) и не обращаться к ним, при каждом HTTP вызове, таким образом, это может быть лучшим вариантом для хранилища данных на стороне клиента.

Вот обзор методов 

 — добавляет пару ключ-значение в локальное веб-хранилище

 — получает значение по ключу

— удаляет элемент по ключу

 — очищает хранилище

Вы можете посмотреть то, что находится в локальном хранилище, зайдя в консоль и введя в неё .

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

Теперь, если вы проверите  в консоле, то вы там увидите новый ключ и значение.

Если вы хотите получить значение конкретного ключа, то вам надо будет использовать метод .

И наконец, вы можете удалить данные с помощью .

А используя , вы очистите всё веб-хранилище.

Теперь мы можем приступить к созданию приложения.

Хранение нестроковых значений с помощью JSON

localStorage может хранить только строковые значения.

Если вы хотите хранить объекты или массивы в качестве значений в localStorage, вы можете использовать JSON.stringify() для преобразования их в строки.

При создании или обновлении пар ключ/значение в localStorage используйте JSON.stringify() с объектом или массивом в качестве аргумента:

Хотя myObj является объектом, JSON.stringify(myObj) преобразуется в строку.

Таким образом, myObj теперь является значением localStorage.

Для чтения и возврата строковых значений используйте метод JSON.parse(). JSON.parse() принимает строки JSON и преобразует их в объекты JavaScript. JSON.parse() принимает в качестве аргумента .getItem():

Теперь элемент устанавливается равным значению ключа.

В приведенном выше фрагменте кода значение ключа было установлено в строковую версию myObj. Использование JSON.parse превращает myObj обратно в объект. Поэтому элемент устанавливается равным myObj как объект, а не как строка.

Возможность преобразовывать массивы и объекты в строки с помощью JSON.stringify и обратно с помощью JSON.parse очень полезна.

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

Saving the form input data in localStorage

gives us access to a browser’s object. The object has methods available to save, read, and remove data, among many other actions.

To see a list of the methods, open the browser console and type . After pressing enter, the methods become available on the object’s .

Using the method

To store the form input data in the browser storage, we must invoke the storage method by using the following syntax:

localStorage.setItem("key", "value")

The browser storage only accepts data-type strings. So, for values of different data types like the object or array, we must convert it to a JSON string using .

Using the Hook to perform side effects

We can also use the React Hook to perform side effects, such as storing data in the browser storage. This makes this Hook a perfect place to call the method.

Open the file and add the following code above the statement:

useEffect(() => {
  // storing input name
  localStorage.setItem("name", JSON.stringify(name));
}, );

Ensure to import the  from React like so:

import { useState, useEffect } from "react";

Here, we’ve assigned a key, , and a dynamic value from the state variable, which is .

The initial value of the state variable defaults to an empty string:

const  = useState("");

Using in the is optional when saving string data to the storage:

localStorage.setItem("name", JSON.stringify(name));

However, is required if the value is a different data type, like an object or array.

Now, save the file and test the project; we should see the following render:

On every keystroke, the input value saves in the local storage because the Hook holding the storage method runs on the first component render and after every state change.

However, on a page reload, the value in the storage returns to an empty string. This is happening because we’ve assigned a default empty string to the state variable, . Hence, React uses the empty value on the initial render.

Now, instead of assigning an empty string, we must get the updated state value at every point from the storage and assign it as the default state value.

5 ответов

Лучший ответ

Проект W3C говорит об этом

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

Хорошая статья для чтения — также http://ejohn.org/blog/dom-storage/

122

Dominic Green
16 Дек 2011 в 16:39

Вместимость

Каждый домен может хранить минимум 5 МБ данных в LocalStorage.

Для некоторых браузеров можно хранить до 1 ГБ данных .

3

Hasan Sefa Ozalp
15 Ноя 2020 в 00:31

Если в Chrome при выполнении «очистки данных просмотра» вы выберете параметр «Файлы cookie и другие данные сайтов и плагинов», то данные sessionStorage будут удалены.

3

Uday Sravan K
17 Апр 2016 в 19:03

Контент в localstorage сохраняется до тех пор, пока пользователь решает очистить хранилище (полностью или одно значение внутри него).

3

Fabrizio Calderan
16 Дек 2011 в 16:46

LocalStorage также известен как веб-хранилище, хранилище HTML5 и хранилище DOM (все они означают одно и то же).

LocalStorage похож на sessionStorage, за исключением того, что данные, хранящиеся в localStorage, не имеют срока действия, а данные, хранящиеся в sessionStorage, очищаются при завершении сеанса просмотра (т. е. когда браузер / браузер вкладка закрыта). Хранилище сеансов используется гораздо реже, чем localStorage, и существует только в пределах текущей вкладки браузера — даже две вкладки, загруженные с одного и того же веб-сайта, будут иметь разные данные sessionStorage. Данные sessionStorage сохраняются при обновлении страницы, но не при закрытии / открытии вкладки. С другой стороны, данные LocalStorage используются всеми вкладками и окнами из одного источника. Срок действия данных LocalStorage не истекает; он остается после перезапуска браузера и даже после перезагрузки ОС.

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

В Firefox localStorage очищается при соблюдении этих трех условий: (а) пользователь очищает недавнюю историю, (б) файлы cookie выбраны для очистки, (в) временной диапазон — «Все».

В Chrome localStorage очищается, когда выполняются следующие условия: (а) очистить данные просмотра, (б) выбраны «файлы cookie и другие данные сайта», (в) временной интервал — «с начала времени». В Chrome теперь также можно удалить localStorage для одного конкретного сайта .

В IE, чтобы очистить localStorage: (a) Инструменты — Свойства обозревателя, (b) вкладка «Общие», (c) удалить историю просмотров при выходе, (d) убедиться, что «Файлы cookie и данные веб-сайтов» (или «временные файлы Интернета и файлы веб-сайтов» «) выбрано, (д) ​​рассмотрите возможность снятия флажка» Сохранить данные избранного веб-сайта «вверху

В Safari: (a) Щелкните Safari (b) Настройки (c) Выберите вкладку Конфиденциальность (d) Щелкните Удалить все данные веб-сайта (e) Щелкните Удалить сейчас

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

На сайте разработчиков Opera есть отличное описание localStorage:

Ресурсы:

146

cssyphus
8 Май 2020 в 20:13

Reading data from the localStorage

On an initial page load, instead of assigning an empty string to the state variable, we must assign a function that accesses the local storage, retrieve the saved value, and use that value as the default.

Using the method

Update the Hook in the file:

const  = useState(() => {
  // getting stored value
  const saved = localStorage.getItem("name");
  const initialValue = JSON.parse(saved);
  return initialValue || "";
});

Here, we use the storage method to retrieve data from the local storage. The used in the code deserializes the returned JSON string from the storage.

Both and are optional when working with string values, as seen in our case. However, other data types, like objects and arrays, require them.

Save the file and test the project. The input data should be available in the form field on a page reload or a later page visit.

Шаг 1: Сохраняем данные в localStorage

В нашем примере нужно сохранить две вещи:

Значение опции Remember Me

Имя пользователя, но только в том случае, если кликнули на опцию Remember Me

Для этих значений идеальным местом является метод :

handleFormSubmit = () => {
  const { user, rememberMe } = this.state;
  localStorage.setItem('rememberMe', rememberMe);
  localStorage.setItem('user', rememberMe ? user : '');
};

Что же происходит в этом методе?

Сначала мы назначаем две переменные с помощью деструктуризации

Далее, мы вызываем метод , чтобы хранить значение опции “Remember Me”.

И под конец мы сохраняем имя пользователя, но только в том случае, когда “Remember Me” выставлено на .

Вот, что пока что у нас есть:

Итак, полдела сделано. Теперь нам надо получить эти значения для компонента.

What is the Web Storage API?

The Web Storage API is a set of mechanisms that enable browsers to store key-value pairs. It is designed to be much more intuitive than using cookies.

The key-value pairs represent storage objects, which are similar to objects except they remain intact during page loads, and are always strings. You can access these values like an object or using the method (more on that later).

What is the difference between and ?

The Web Storage API consists of two mechanisms: and . Both and maintain a separate storage area for each available origin for the duration of the page session.

The main difference between and is that only maintains a storage area while the browser is open (including when the page reloads or restores) while continues to store data after the browser is closed. In other words, whereas data stored in is cleared when the page is closed, data stored in does not expire.

In this tutorial, we’ll focus on how to use in JavaScript.

Событие storage

Когда обновляются данные в или , генерируется событие со следующими свойствами:

  • – ключ, который обновился (, если вызван ).
  • – старое значение (, если ключ добавлен впервые).
  • – новое значение (, если ключ был удалён).
  • – url документа, где произошло обновление.
  • – объект или , где произошло обновление.

Важно: событие срабатывает на всех остальных объектах , где доступно хранилище, кроме того окна, которое его вызвало. Давайте уточним

Давайте уточним.

Представьте, что у вас есть два окна с одним и тем же сайтом. Хранилище разделяется между ними.

Вы можете открыть эту страницу в двух окнах браузера, чтобы проверить приведённый ниже код.

Теперь, если оба окна слушают , то каждое из них будет реагировать на обновления, произошедшие в другом окне.

Обратите внимание, что событие также содержит: – url-адрес документа, в котором данные обновились. Также содержит объект хранилища – событие одно и то же для и , поэтому ссылается на то хранилище, которое было изменено

Мы можем захотеть что-то записать в ответ на изменения

Также содержит объект хранилища – событие одно и то же для и , поэтому ссылается на то хранилище, которое было изменено. Мы можем захотеть что-то записать в ответ на изменения.

Это позволяет разным окнам одного источника обмениваться сообщениями.

Современные браузеры также поддерживают Broadcast channel API специальный API для связи между окнами одного источника, он более полнофункциональный, но менее поддерживаемый. Существуют библиотеки (полифилы), которые эмулируют это API на основе и делают его доступным везде.

Conclusion

We’ve covered how to use the to persist data in a browser using the React Hooks. We’ve also learned how to create a custom Hook to extract component logic into reusable functions.

If you enjoyed this guide, share it around the web. And, if you have any questions or contributions, please share them via the comment section.

Find the entire source code for the project here.

Full visibility into production React apps

Debugging React applications can be difficult, especially when users experience issues that are hard to reproduce. If you’re interested in monitoring and tracking Redux state, automatically surfacing JavaScript errors, and tracking slow network requests and component load time, try LogRocket.

LogRocket is like a DVR for web apps, recording literally everything that happens on your React app. Instead of guessing why problems happen, you can aggregate and report on what state your application was in when an issue occurred. LogRocket also monitors your app’s performance, reporting with metrics like client CPU load, client memory usage, and more.

The LogRocket Redux middleware package adds an extra layer of visibility into your user sessions. LogRocket logs all actions and state from your Redux stores.

Modernize how you debug your React apps — start monitoring for free.

sessionStorage

The object is used much less often than .

Properties and methods are the same, but it’s much more limited:

  • The exists only within the current browser tab.
    • Another tab with the same page will have a different storage.
    • But it is shared between iframes in the same tab (assuming they come from the same origin).
  • The data survives page refresh, but not closing/opening the tab.

Let’s see that in action.

Run this code…

…Then refresh the page. Now you can still get the data:

…But if you open the same page in another tab, and try again there, the code above returns , meaning “nothing found”.

That’s exactly because is bound not only to the origin, but also to the browser tab. For that reason, is used sparingly.

localStorage limitations

As easy as it is to use , it is also easy to misuse it. The following are limitations, and also ways to NOT use :

  • Do not store sensitive user information in
  • It is not a substitute for a server based database as information is only stored on the browser
  • is limited to 5MB across all major browsers
  • is quite insecure as it has no form of data protection and can be accessed by any code on your web page
  • is synchronous, meaning each operation called would only execute one after the other

With these, we have been armed with the power of in our web applications.

LogRocket: Debug JavaScript errors more easily by understanding the context

Debugging code is always a tedious task. But the more you understand your errors the easier it is to fix them.

LogRocket allows you to understand these errors in new and unique ways. Our frontend monitoring solution tracks user engagement with your JavaScript frontends to give you the ability to find out exactly what the user did that led to an error.

LogRocket records console logs, page load times, stacktraces, slow network requests/responses with headers + bodies, browser metadata, and custom logs. Understanding the impact of your JavaScript code will never be easier!

Try it for free.

How does localStorage work?

To use in your web applications, there are five methods to choose from:

  1. : Add key and value to
  2. : This is how you get items from
  3. : Remove an item by key from
  4. : Clear all
  5. : Passed a number to retrieve the key of a

: How to store values in

Just as the name implies, this method allows you to store values in the object.

It takes two parameters: a key and a value. The key can be referenced later to fetch the value attached to it.

window.localStorage.setItem('name', 'Obaseki Nosa');

Where is the key and is the value. Also note that can only store strings.

To store arrays or objects, you would have to convert them to strings.

To do this, we use the method before passing to .

const person = {
    name: "Obaseki Nosa",
    location: "Lagos",
}

window.localStorage.setItem('user', JSON.stringify(person));

: How to get items from

To get items from localStorage, use the method.  allows you to access the data stored in the browser’s object.

accepts only one parameter, which is the , and returns the as a string.

To retrieve a user key:

window.localStorage.getItem('user');

This returns a string with value as:

“{“name”:”Obaseki Nosa”,”location”:”Lagos”}”

To use this value, you would have to convert it back to an object.

To do this, we make use of the method, which converts a JSON string into a JavaScript object.

JSON.parse(window.localStorage.getItem('user'));

: How to delete sessions

To delete local storage sessions, use the method.

When passed a key name, the method removes that key from the storage if it exists. If there is no item associated with the given key, this method will do nothing.

window.localStorage.removeItem('name');

: How to delete all items in

Use the method to delete all items in .

This method, when invoked, clears the entire storage of all records for that domain. It does not receive any parameters.

window.localStorage.clear();

: How to get the name of a key in

The method comes in handy in situations where you need to loop through keys and allows you to pass a number or index to to retrieve the name of the key.

var KeyName = window.localStorage.key(index);
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: