Какие?
localStorage
является частью HTML5 Web Storage API. Это позволяет вам, разработчику, хранить информацию в браузере и дает вам возможность легко извлекать и использовать сохраненные данные. Данные хранятся в виде "key"
Информация, хранящаяся в localStorage
, находится на стороне клиента, и, в отличие от файлов cookie, она не отправляется обратно на сервер и не имеет срока действия.
Легко читать о локальном хранилище и не совсем понимать, когда и зачем его использовать и что отличает его от других решений веб-хранилища, поэтому давайте сравним локальное хранилище с файлами cookie и хранилищем сеансов.
Локальное хранилище, файлы cookie и хранилище сеансов
Из этой диаграммы мы можем легко увидеть различия между этими тремя вариантами веб-хранилища. Первое отличие заключается в количестве дискового пространства, выделенного для каждого из них. Файлы cookie и SessionStorage ограничены 4 КБ и 5 МБ соответственно, в то время как локальное хранилище варьируется от 5 до 10 МБ и даже до 2 МБ в случае Android Browser v4.3.
- Гугл Хром: 10 МБ
- Android: 2 МБ
- Фаерфокс: 10 МБ
- Сафари: 5 МБ
Во-вторых, в то время как хранение сеанса и файлы cookie истекают в зависимости от настроек веб-страницы или закрытия окна/вкладки, локальное хранилище никогда не истечет, если только оно не будет явно удалено с помощью JS или пользователь не удалит его вручную. Кроме того, локальное хранилище и хранилище сеансов читаются только клиентом. Это важно, поскольку позволяет сайтам хранить конкретную информацию о конкретном пользователе без необходимости отправки браузером какой-либо информации на сервер и ожидания ответа.
Когда и как использовать локальное хранилище?
Локальное хранилище предоставляет нам 5 простых методов для чтения, доступа и управления им.
localStorage.setItem("key", "value")
: добавить записьkey : value
в локальное хранилище.localStorage.getItem("key")
: получитьvalue
изkey
, передав ключ в метод в качестве аргументаlocalStorage.removeItem("key")
: удалить запись из локального хранилища, передав ключ в качестве аргументаlocalStorage.clear()
: очищает все записи в локальном хранилище.localStorage.key(n)
: учитывая число, вернет n-й ключ
Локальное хранилище может хранить только строки как тип данных, и попытка сохранить любой другой тип данных приведет к автоматическому преобразованию этого объекта в строку. Однако, преобразовывая наши данные в JSON с помощью таких методов, как JSON.strigify()
для сохранения записи и JSON.parse()
при получении записи, мы можем легко хранить и получать доступ к объектам JavaScript через локальное хранилище.
На стороне клиента в каждом браузере и операционной системе есть место, отведенное для выделения локального хранилища. Например, Chrome хранит LocalStorage в следующем каталоге:
~/Library/Application Support/Google/Chrome/<Profile>/Local Storage/
В то время как Firefox хранит в следующем:
~/Library/Application Support/Firefox/Profiles/<profile folder>/webappsstore.sqlite
Обычная реализация локального хранилища отслеживает, какой пользователь вошел в наше приложение на определенном устройстве. Для этого в какой-то момент процесса входа в систему, после аутентификации и проверки, мы хотим добавить новый элемент в наше локальное хранилище.
let user = { id: 1, first_name: "Cory" } >> Successful Login window.localStorage.setItem("current_user", JSON.strigify(user))
Сделав это, мы преобразовали наш пользовательский объект в строку, которую можно сохранить в локальном хранилище. Итак, теперь, чтобы получить эту информацию в вашем приложении, вы должны сделать следующее:
JSON.parse(window.localStorage.getItem("current_user")) >> user = {id: 1, first_name: "cory"}
Локальное хранилище просто и эффективно в использовании, но его также легко использовать не по назначению.
Разумное использование LocalStorage
Хотя LocalStorage может быть невероятно полезным, он по-прежнему уязвим при использовании для хранения конфиденциальной информации. Локальное хранилище подвержено риску атак с использованием межсайтовых сценариев, и в результате информация, хранящаяся в нем, может попасть в чужие руки. LocalStorage, хотя и очень быстро извлекает и сохраняет информацию, также является синхронным, что означает, что любые вызовы к нему будут выполняться после завершения предыдущего вызова и могут вызвать непредвиденные проблемы, если вы попытаетесь использовать его в асинхронных функциях. Локальное хранилище также никогда не следует ошибочно принимать за альтернативу серверной базе данных, поскольку оно ограничено по объему хранилища и может быть доступно любому, у кого есть доступ к вашим локальным файлам.
Шифрование локального хранилища
Лучший способ обеспечить безопасность при использовании локального хранилища — это шифрование. Шифрование — это процесс преобразования информации или данных в код, особенно для предотвращения несанкционированного доступа. Самый популярный метод шифрования локального хранилища — с помощью пакета secure-web-storage. Следующий код является примером использования этой библиотеки.
var CryptoJS = require("crypto-js"); var SECRET_KEY = 'my secret key'; var secureStorage = new SecureStorage(localStorage, { hash: function hash(key) { key = CryptoJS.SHA256(key, SECRET_KEY); return key.toString(); }, encrypt: function encrypt(data) { data = CryptoJS.AES.encrypt(data, SECRET_KEY); data = data.toString(); return data; }, decrypt: function decrypt(data) { data = CryptoJS.AES.decrypt(data, SECRET_KEY); data = data.toString(CryptoJS.enc.Utf8); return data; } }); var data = { secret: 'data' }; // there is no need to stringify/parse you objects before and after storing. secureStorage.setItem('data', data); // stores in localStorage like: // key => value // "ad36d572..." => "w1svi6n..." var decryptedData = secureStorage.getItem('data'); // returns { secret: 'data' } secureStorage.removeItem('data'); // removes the entry 'data' secureStorage.key(id) // returns the hashed version of the key you passed into setItem with the given id. secureStorage.clear(); // clears all data in the underlining sessionStorage/localStorage. secureStorage.length; // the number of entries in the underlining sessionStorage/localStorage.
Посмотреть локальное хранилище в действии
Популярные способы использования LocalStorage можно найти на любом крупном сайте, щелкнув правой кнопкой мыши веб-страницу и выбрав «проверить», а затем щелкнув «Приложение» в верхнем меню и перейдя к «Локальное хранилище». Если вы сделаете это на таком сайте, как YouTube или Reddit, вы увидите, что они хранят такую информацию, как пользовательские настройки, в локальном хранилище. Вы можете обнаружить, что они хранят такие вещи, как ваши настройки для темного и светлого режима или ваши настройки громкости видео, например, на YouTube. Они хранят информацию, которая по своей природе не является конфиденциальной, и клиент должен получить к ней очень быстрый доступ.