В чем разница между localStorage, sessionStorage, session и cookies?

Каковы технические плюсы и минусы localStorage, sessionStorage, сеанса и файлов cookie, и когда я могу использовать одно вместо другого?


person Pank    schedule 08.11.2013    source источник
comment
Это также смежная тема, которую стоит изучить: Локальное хранилище HTML5 против хранилища сеансов (заголовок stackoverflow.com/questions/5523140/)   -  person Sarin Jacob Sunny    schedule 11.01.2016
comment
Также обратите внимание, что файлы cookie сеанса существуют, пока открыто ОКНО браузера (не вкладка, в которой они были установлены), НО sessionStorage обнуляется, как только вы закрываете вкладку ...   -  person yar1    schedule 05.07.2016
comment
Да, сеанс также является типом cookie. Характерной чертой является то, что файл cookie является временным, а файл cookie - постоянным.   -  person Faris Rayhan    schedule 11.01.2017
comment
@ yar1 Определенное окно браузера не имеет отношения к пользовательскому интерфейсу.   -  person curiousguy    schedule 24.10.2018


Ответы (8)


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

Во всех случаях эти механизмы хранения будут специфичными для отдельного браузера на отдельном компьютере / устройстве. Любое требование по хранению данных на постоянной основе между сеансами должно включать в себя серверную часть вашего приложения - скорее всего, с использованием базы данных, но, возможно, XML или текстового / CSV-файла.

localStorage, sessionStorage и файлы cookie - все это клиентские решения для хранения данных. Данные сеанса хранятся на сервере, где они остаются под вашим прямым контролем.

localStorage и sessionStorage

localStorage и sessionStorage - это относительно новые API (что означает, что не все устаревшие браузеры будут их поддерживать) и почти идентичны (как в API, так и в возможностях) за единственным исключением постоянства. sessionStorage (как следует из названия) доступен только на время сеанса браузера (и удаляется при закрытии вкладки или окна) - однако он выдерживает перезагрузку страницы (source Руководство по хранилищу DOM - Сеть разработчиков Mozilla).

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

localStorage и sessionStorage идеально подходят для хранения неконфиденциальных данных, необходимых в клиентских скриптах между страницами (например: предпочтения, оценки в играх). Данные, хранящиеся в localStorage и sessionStorage, можно легко прочитать или изменить изнутри клиента / браузера, поэтому на них не следует полагаться для хранения конфиденциальных или связанных с безопасностью данных в приложениях.

Печенье

Это также верно для файлов cookie, они могут быть тривиально изменены пользователем, и данные также могут быть прочитаны из них в виде обычного текста, поэтому, если вы хотите хранить конфиденциальные данные, сеанс действительно является вашим единственным вариантом. Если вы не используете SSL, информация cookie также может быть перехвачена при передаче, особенно в открытом Wi-Fi.

С положительной стороны, файлы cookie могут иметь определенную степень защиты от угроз безопасности, таких как межсайтовые сценарии (XSS) / внедрение сценариев, путем установки флага только HTTP, что означает, что современные (поддерживающие) браузеры будут предотвращать доступ к файлам cookie и значениям из JavaScript ( это также предотвратит доступ к ним вашего собственного законного JavaScript). Это особенно важно для файлов cookie аутентификации, которые используются для хранения токена, содержащего сведения о пользователе, который вошел в систему - если у вас есть копия этого файла cookie, то для всех целей и целей вы становитесь этим пользователем. что касается веб-приложения, и иметь такой же доступ к данным и функциям, что и пользователь.

Поскольку файлы cookie используются для аутентификации и сохранения данных пользователя, все файлы cookie, действительные для страницы, отправляются из браузера на сервер для каждого запроса к одному и тому же домену - это включает исходный запрос страницы, все последующие запросы Ajax, все изображения, таблицы стилей, скрипты и шрифты. По этой причине файлы cookie не следует использовать для хранения больших объемов информации. Браузер также может устанавливать ограничения на размер информации, которая может храниться в файлах cookie. Обычно файлы cookie используются для хранения идентифицирующих токенов для аутентификации, сеанса и отслеживания рекламы. Как правило, токены сами по себе не являются удобочитаемой информацией, а представляют собой зашифрованные идентификаторы, связанные с вашим приложением или базой данных.

localStorage против sessionStorage против файлов cookie

Что касается возможностей, файлы cookie, sessionStorage и localStorage позволяют хранить только строки - можно неявно преобразовывать примитивные значения при настройке (их нужно будет преобразовать обратно, чтобы использовать их в качестве своего типа после чтения), но не объекты или массивы (их можно сериализовать в формате JSON для хранения с помощью API). Хранилище сеансов обычно позволяет хранить любые примитивы или объекты, поддерживаемые языком / фреймворком на стороне сервера.

На стороне клиента и на стороне сервера

Поскольку HTTP является протоколом без сохранения состояния - веб-приложения не имеют возможности идентифицировать пользователя по предыдущим посещениям при возвращении на веб-сайт - данные сеанса обычно полагаются на токен cookie для идентификации пользователя для повторных посещений (хотя редко параметры URL могут использоваться для с той же целью). У данных обычно будет скользящее время истечения (обновляется каждый раз, когда пользователь посещает), и в зависимости от вашего сервера / фреймворка данные будут либо храниться внутри процесса (это означает, что данные будут потеряны, если веб-сервер выйдет из строя или перезапустится), либо извне в государственный сервер или база данных. Это также необходимо при использовании веб-фермы (более одного сервера для данного веб-сайта).

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

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

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

localStorage, sessionStorage и файлы cookie подчиняются правилам «одинакового происхождения», что означает, что браузеры должны предотвращать доступ к данным, за исключением домена, который установил информацию для начала.

Дополнительную информацию о технологиях клиентского хранилища см. В разделе Dive Into Html 5.

person pwdst    schedule 08.11.2013
comment
Осторожно: sessionStorage, localStorage не подходят для аутентификационной информации. Они не отправляются на сервер автоматически. Это означает, что если пользователь изменяет URL-адрес вручную или щелкает HTML-ссылки, вы не получите информацию для аутентификации. Даже если вы переписываете HTML-ссылки, вы вынуждены передавать аутентификационную информацию по URL-адресу, что является запретом безопасности. В конце дня вы будете вынуждены использовать файлы cookie. См. stackoverflow.com/q/26556749/14731 для связанной темы. - person Gili; 29.10.2014
comment
Будет ли sessionStorage удаляться при закрытии окна или вкладки? - person trysis; 06.11.2014
comment
SessionStorage будет удален при закрытии вкладки. - person rcarrillopadron; 21.11.2014
comment
@Gili, почему передача информации об авторизации по URL-адресу является единственным вариантом, если не используются файлы cookie? Почему бы не передать его в HTTP-заголовке? - person yby; 29.12.2014
comment
@yby, потому что такие действия, как перезагрузка страницы, просмотр исходного кода и другие, не позволяют настроить отправку настраиваемого HTTP-заголовка. - person Gili; 29.12.2014
comment
@Gili Если вам не нужна аутентификация для статических ресурсов (html, imgs и т. Д.), И она нужна только для запросов данных, которые будут написаны на JS, где вы всегда можете установить заголовки, я думаю, что сохранение его в локальном хранилище должно быть жизнеспособным , если у вас нет других аргументов против этого. - person Patrick; 09.07.2015
comment
@Gili Вы правильно сказали, что он не отправляется автоматически, но вы неправильно сказали, что это не подходит. Я использую localStorage и sessionStorage во многих различных производственных приложениях, которые у меня есть для моих клиентов, и у меня не было ни одной уязвимости из-за использования localStorage / sessionStorage в сочетании с отправкой идентификатора и токена в заголовках. Даже меньше нагрузки на сервер. Также я привязываю событие к хукам перезагрузки страницы и загрузки приложения, чтобы спросить мой сервер, прошли ли эти пользователи аутентификацию. Работает отлично. Удачной аутентификации! РЕДАКТИРОВАТЬ: токен CSRF со всем, что добавляет еще больше безопасности. - person NodeDad; 16.08.2015
comment
@rcarrillopadron Вообще-то это неправда. sessionStorage длится в течение сеанса браузера. - person ffxsam; 02.10.2015
comment
Браузер @ffxsam сохраняет данные с помощью sessionStorage? AFAIR, это разница между localStorage и sessionStorage - person rcarrillopadron; 02.10.2015
comment
@rcarrillopadron localStorage сохраняется навсегда до удаления, sessionStorage сохраняется в течение всего сеанса браузера (аналогично файлу cookie для каждого сеанса). Вы можете проверить это, открыв консоль и установив элемент sessionStorage, закрыв вкладку (не браузер), а затем вернувшись на тот же веб-сайт и посмотрев на объект sessionStorage. - person ffxsam; 02.10.2015
comment
ТАКЖЕ: файлы cookie сеанса существуют, пока открыто ОКНО браузера (не вкладка, в которой они были установлены), НО sessionStorage обнуляется, как только вы закрываете вкладку ... - person yar1; 05.07.2016
comment
Отличный момент в сравнении localStorage и document.cookie: cookie будет отправляться с каждым запросом на сервер. Я только что закончил приложение, которое использует файлы cookie для сохранения результатов викторины, но, поскольку мне не нужно видеть их на стороне сервера, я мог / должен был сохранить их в localStorage, чтобы немного сократить время запроса / ответа. Также полезно знать, что localStorage также может хранить примитивы JS, в то время как файлы cookie хранят только строки. - person Phil Tune; 04.11.2016
comment
Я не совсем убедился в -In terms of capabilities, cookies only allow you to store strings. sessionStorage and localStorage allow you to store JavaScript primitives. Я пробовал хранить различные примитивные типы данных, например. строка, число, логическое значение в файлы cookie. Все они сохраняются в файлы cookie в виде строк. Как это недостаток или разница в поведении по сравнению с localStorage или sessionStorage. Я также сохранил логическую переменную, имеющую значение true, в localStorage, но когда я извлек ее в другую переменную и сделал typeof, там также написано string. Так что даже localStorage использует строки. - person RBT; 03.06.2017
comment
@RBT Я прочитал спецификации и документацию как для sessionStorage, так и для localStorage, и похоже, что вы правы в том, что и ключи, и значения хранятся в виде строк (в частности, DOMStrings developer.mozilla.org/en-US/docs/Web/API/DOMString). Я не уверен, изменилась ли спецификация или я неправильно понял источники в то время, учитывая правдивость в ECMAScript - я обновлю ответ. - person pwdst; 04.06.2017
comment
это означает, что не все устаревшие браузеры будут их поддерживать Вы действительно должны поддерживать те старые браузеры, которые не поддерживают JS API так же хорошо, как localStorage? (При условии, конечно, что поддержка JS активна.) Окупается ли поддержка старых браузеров? - person curiousguy; 24.10.2018
comment
@curiousguy Это вопрос, на который индивидуальный разработчик должен будет ответить, исходя из своей клиентской базы, использования и требований. Также имейте в виду, что этот ответ был написан почти пять лет назад, и ожидания поддержки браузеров, конечно, изменились за это время. - person pwdst; 25.10.2018
comment
@pwdst вы говорите, что: ›Данные, хранящиеся в localStorage и sessionStorage, можно легко прочитать или изменить изнутри клиента / браузера, поэтому на них нельзя полагаться для хранения конфиденциальных или связанных с безопасностью данных в приложениях. но также: ›если вы хотите хранить конфиденциальные данные, то сеанс - действительно ваш единственный вариант (в параграфе о файлах cookie). Можете ли вы уточнить? Я имею в виду, так почему хранилище сеансов нехорошо, а позже вы утверждаете в параграфе cookie, что это нормально? С Уважением - person tikej; 25.04.2021
comment
@tikej Вы объединяете sessionStorage с технологией браузера (см. developer.mozilla.org / en-US / docs / Web / API / Web_Storage_API) и состояние сеанса, которое инфраструктура веб-приложений может использовать на стороне сервера. sessionStorage находится в браузере и, как таковой, может быть прочитан и обработан пользователем или любыми скриптами, которые злоумышленник может внедрить на страницу. Если вы перечитаете ответ с учетом этого, то, надеюсь, это будет иметь для вас больше смысла. - person pwdst; 26.04.2021

  1. LocalStorage

    Плюсы:

    1. Web storage can be viewed simplistically as an improvement on cookies, providing much greater storage capacity. If you look at the Mozilla source code we can see that 5120KB (5MB which equals 2.5 Million chars on Chrome) is the default storage size for an entire domain. This gives you considerably more space to work with than a typical 4KB cookie.
    2. Данные не отправляются обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. Д.), Что снижает объем трафика между клиентом и сервером.
    3. Данные, хранящиеся в localStorage, сохраняются до тех пор, пока явно не будут удалены. Внесенные изменения сохраняются и доступны для всех текущих и будущих посещений сайта.

    Минусы:

    1. Он работает в соответствии с политикой одинакового происхождения. Таким образом, сохраненные данные будут доступны только из одного источника.
  2. файлы cookie

    Плюсы:

    1. Compared to others, there's nothing AFAIK.

    Минусы:

    1. Предел 4K предназначен для всего файла cookie, включая имя, значение, дату истечения срока действия и т. Д. Для поддержки большинства браузеров используйте имя не более 4000 байт, а общий размер файла cookie не должен превышать 4093 байта.
    2. Данные отправляются обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. Д.), Что увеличивает объем трафика между клиентом и сервером.

      Обычно допускается следующее:

      • 300 cookies in total
      • 4096 байт на файл cookie
      • 20 файлов cookie на домен
      • 81920 байт на домен (учитывая 20 файлов cookie максимального размера 4096 = 81920 байт).
  3. sessionStorage

    Плюсы:

    1. It is similar to localStorage.
    2. Данные не являются постоянными, т.е. данные доступны только для каждого окна (или вкладки в браузерах, таких как Chrome и Firefox). Данные доступны только во время сеанса страницы. Внесенные изменения сохраняются и доступны для текущей страницы, а также для будущих посещений сайта в том же окне. После закрытия окна хранилище удаляется.

    Минусы:

    1. Данные доступны только внутри того окна / вкладки, в котором они были установлены.
    2. Как и localStorage, он работает в соответствии с политикой одинакового происхождения. Таким образом, сохраненные данные будут доступны только из одного источника.

Ознакомьтесь с между вкладками - как упростить взаимодействие между вкладками браузера с разными источниками.

person softvar    schedule 04.06.2017
comment
Файлы cookie: данные отправляются обратно на сервер для каждого запроса HTTP. В некоторых случаях использования (например, в процессе аутентификации) это также можно рассматривать как преимущество. sessionStorage: Изменения доступны только для каждого окна (или вкладки в браузерах, таких как Chrome и Firefox). Думаю, лучше сформулировать это Изменения доступны только во время сеанса страницы. Сеанс страницы длится, пока открыт браузер, и выживает после перезагрузки и восстановления страницы (из MDN: developer.mozilla.org/en/docs/Web/API/Window/sessionStorage) - person Deniz; 27.07.2017
comment
Обновлено! Спасибо @DenizToprak - person softvar; 20.01.2018
comment
@softvar: sessionStorage - Con 2.: данные не являются постоянными, т.е. они будут потеряны после закрытия окна / вкладки. - Это точно не дефект. Я бы сказал, что это преимущество. В конце концов, это хранилище сеансов. Он создан для того, чтобы работать именно так. - person devstructor; 18.04.2018
comment
@devstructor Да, ты прав. Я думал это с точки зрения хранения некоторых данных локально. Обновили ответ. Спасибо что подметил это. - person softvar; 19.04.2018
comment
@softvar, вы сказали, что sessionStorage доступен для будущего посещения в том же окне. Разве жизнь sessionStorage не длится до тех пор, пока страница не существует? что приводит к его уничтожению при закрытии вкладки или окна. Если это так, как я сказал, как закрыть сайт и снова открыть его в том же окне, сделать доступным мое ранее сохраненное хранилище sessionStorage? - person pravin poudel; 06.03.2021

Хорошо, LocalStorage, поскольку он называется локальным хранилищем для ваших браузеров, может сэкономить до 10 МБ, SessionStorage делает то же самое, но как его название говоря, он основан на сеансе и будет удален после закрытия браузера, также может сэкономить меньше, чем LocalStorage, например, до 5 МБ, но файлы cookie - это очень маленькие данные, хранящиеся в вашем браузере , который может сэкономить 4 КБ и доступен как через сервер, так и через браузер ...

Я также создал изображение ниже, чтобы сразу показать различия:

LocalStorage, SessionStorage и файлы cookie

person Alireza    schedule 17.02.2018

Это свойства объекта «окно» в JavaScript, точно так же, как документ является одним из свойств объекта окна, который содержит объекты DOM.

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

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

Вы можете установить и получить сохраненные данные следующим образом:

sessionStorage.setItem('key', 'value');

var data = sessionStorage.getItem('key');

Аналогично для localStorage.

person Prashant_M    schedule 28.01.2016
comment
Просто добавлю - для sessionStorage даже новая вкладка - это новое окно. Таким образом, все, что хранится для определенного домена на одной вкладке, не будет доступно для того же домена на следующей вкладке. - person RBT; 03.06.2017

вот краткий обзор и с простым и быстрым пониманием

введите описание изображения здесь

от учителя Бо Карнеса из freecodecamp

person Ntwari Clarance Liberiste    schedule 01.06.2020

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

В локальном хранилище можно хранить 5-10 МБ автономных данных.

//Set the value in a local storage object
localStorage.setItem('name', myName);

//Get the value from storage object
localStorage.getItem('name');

//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege

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

В хранилище сеансов может храниться до 5 МБ данных

//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";

Сеанс: сеанс - это глобальная переменная, хранящаяся на сервере. Каждому сеансу присваивается уникальный идентификатор, который используется для получения сохраненных значений.

Файлы cookie. Файлы cookie - это данные, которые хранятся на вашем компьютере в небольших текстовых файлах в виде пар "имя-значение". После установки cookie все последующие запросы страниц возвращают имя и значение cookie.

person Srikrushna    schedule 29.06.2018

API веб-хранилища предоставляет механизмы, с помощью которых браузеры могут безопасно хранить пары ключ / значение гораздо более интуитивно, чем использование файлов cookie. Web Storage API расширяет объект Window двумя новыми свойствами. - Window.sessionStorage и Window.localStorage. - вызов одного из них создаст экземпляр объекта Storage, с помощью которого элементы данных могут быть установлены, извлечены и удалены. Для sessionStorage и localStorage для каждого источника (домена) используется другой объект Storage.

Объекты хранилища - это простые хранилища пары "ключ-значение", похожие на объекты, но они остаются неизменными при загрузке страницы.

localStorage.colorSetting = '#a4509b';
localStorage['colorSetting'] = '#a4509b';
localStorage.setItem('colorSetting', '#a4509b');

Ключи и значения всегда являются строками. Чтобы сохранить любой тип convert it to String, а затем сохранить его. Всегда рекомендуется использовать Storage interface < / a> методы.

var testObject = { 'one': 1, 'two': 2, 'three': 3 };
// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));
// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');
console.log('Converting String to Object: ', JSON.parse(retrievedObject));

В веб-хранилище есть два механизма:

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

Хранилище «Локальное хранилище записывает данные на диск, а хранилище сеансов записывает данные только в память. Все данные, записанные в хранилище сеанса, удаляются при выходе из вашего приложения.

максимальный доступный объем хранилища различается в зависимости от браузера, но большинство браузеров реализуют по крайней мере рекомендуемый w3c максимальный предел хранения в 5 МБ.

+----------------+--------+---------+-----------+--------+
|                | Chrome | Firefox | Safari    |  IE    |
+----------------+--------+---------+-----------+--------+
| LocalStorage   | 10MB   | 10MB    | 5MB       | 10MB   |
+----------------+--------+---------+-----------+--------+
| SessionStorage | 10MB   | 10MB    | Unlimited | 10MB   |
+----------------+--------+---------+-----------+--------+

Всегда выявлять ошибки безопасности и превышения квоты LocalStorage

StorageEvent «Событие хранилища запускается для объекта Window документа. при изменении места хранения. Когда пользовательский агент должен отправить уведомление хранилища для документа, пользовательский агент должен поставить задачу в очередь для запуска события с именем хранилище в объекте Window объекта Document, используя StorageEvent.

Примечание. Реальный пример см. В демонстрации веб-хранилища. . проверить исходный код

Прослушайте событие хранилища в dom / Window, чтобы уловить изменения в хранилище. скрипка.


Файлы cookie (веб-файлы cookie, файлы cookie браузера) Файлы cookie - это данные, которые хранятся в небольших текстовых файлах в виде пар имя-значение на вашем компьютере.

Доступ к JavaScript с использованием Document.cookie

Новые файлы cookie также могут быть созданы с помощью JavaScript с помощью свойства Document.cookie, и если флаг HttpOnly не установлен, доступ к существующим файлам cookie также можно получить из JavaScript.

document.cookie = "yummy_cookie=choco"; 
document.cookie = "tasty_cookie=strawberry"; 
console.log(document.cookie); 
// logs "yummy_cookie=choco; tasty_cookie=strawberry"

Безопасные файлы cookie и файлы cookie HttpOnly Механизм управления состоянием HTTP

Файлы cookie часто используются в веб-приложении для идентификации пользователя и его аутентифицированного сеанса.

При получении HTTP-запроса сервер может отправить Set -Cookie заголовок с ответом. Файл cookie обычно сохраняется в браузере, а затем файл cookie отправляется с запросами, сделанными на тот же сервер внутри HTTP-заголовка cookie.

Set-Cookie: <cookie-name>=<cookie-value> 
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>

Сессионные файлы cookie удаляются при завершении работы клиента. В них не указаны директивы Expires или Max-Age.

Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/

Постоянные файлы cookie истекают в определенный день (Expires) или через определенный промежуток времени (Max-Age).

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Заголовок HTTP-запроса Cookie содержит сохраненные HTTP-файлы cookie, ранее отправленные сервером с заголовком Set-Cookie. Файлы cookie только для HTTP недоступны через JavaScript через свойство Document.cookie, XMLHttpRequest и API-интерфейсы запросов для предотвращения атак на межсайтовый скриптинг (XSS).

Файлы cookie в основном используются для трех целей:

  • Управление сеансом «Логины, корзины покупок, результаты игр или что-то еще, что сервер должен запомнить.
  • Персонализация «Пользовательские настройки, темы и другие настройки
  • Отслеживание (запись и анализ поведения пользователя) «Файлы cookie имеют связанный с ними домен. Если этот домен совпадает с доменом страницы, на которой вы находитесь, файлы cookie считаются собственными файлами cookie. Если домен другой, считается, что это сторонний файл cookie. Хотя основные файлы cookie отправляются только на сервер, который их устанавливает, веб-страница может содержать изображения или другие компоненты, хранящиеся на серверах в других доменах (например, рекламные баннеры). Файлы cookie, которые отправляются через эти сторонние компоненты, называются сторонними файлами cookie и в основном используются для рекламы и отслеживания в Интернете.

Файлы cookie были изобретены, чтобы решить проблему запоминания информации о пользователе:

  • Когда пользователь посещает веб-страницу, его имя может быть сохранено в файле cookie.
  • В следующий раз, когда пользователь посещает страницу, к запросу добавляются файлы cookie, принадлежащие странице. Таким образом сервер получает необходимые данные для запоминания информации о пользователях.

GitHubGist Пример


В итоге

  • localStorage сохраняется в разных вкладках или окнах, и даже если мы закроем браузер, в соответствии с политикой безопасности домена и выбором пользователя в отношении ограничения квоты.
  • Объект sessionStorage не сохраняется, если мы закрываем вкладку (контекст просмотра верхнего уровня), поскольку он не существует, если мы просматриваем другую вкладку или окно.
  • Веб-хранилище (сеансовое, локальное) позволяет нам сохранять большое количество пар ключ / значение и много текста, что невозможно сделать с помощью файлов cookie.
  • Файлы cookie, которые используются для конфиденциальных действий, должны иметь короткий срок жизни.
  • Файлы cookie в основном используются для рекламы и отслеживания в Интернете. См., Например, типы файлов cookie, используемых Google.
  • Файлы cookie отправляются с каждым запросом, поэтому они могут ухудшить производительность (особенно для мобильных подключений для передачи данных). Современные API для клиентского хранилища - это API веб-хранилища (localStorage и sessionStorage) и IndexedDB.
person Yash    schedule 16.03.2018

LocalStorage:

  • Веб-хранилище можно упрощенно рассматривать как усовершенствование файлов cookie, обеспечивающее гораздо большую емкость хранилища. Доступный размер составляет 5 МБ, что значительно больше места для работы, чем типичный файл cookie размером 4 КБ.

  • Данные не отправляются обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. Д.), Что снижает объем трафика между клиентом и сервером.

  • Данные, хранящиеся в localStorage, сохраняются до тех пор, пока явно не будут удалены. Внесенные изменения сохраняются и доступны для всех текущих и будущих посещений сайта.

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

Файлы cookie:

  • Мы можем установить срок действия для каждого файла cookie

  • Предел 4K предназначен для всего файла cookie, включая имя, значение, дату истечения срока действия и т. Д. Для поддержки большинства браузеров используйте имя не более 4000 байт, а общий размер файла cookie не должен превышать 4093 байта.

  • Данные отправляются обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. Д.), Что увеличивает объем трафика между клиентом и сервером.

sessionStorage:

  • Он похож на localStorage.
  • Изменения доступны только для каждого окна (или вкладки в браузерах, таких как Chrome и Firefox). Внесенные изменения сохраняются и доступны для текущей страницы, а также для будущих посещений сайта в том же окне. После закрытия окна хранилище удаляется. Данные доступны только в том окне / вкладке, в котором они были установлены.

  • Данные не являются постоянными, т.е. они будут потеряны после закрытия окна / вкладки. Как и localStorage, он работает с политикой одинакового происхождения. Таким образом, сохраненные данные будут доступны только из одного источника.

person Developer    schedule 04.03.2019