В чем разница между cookie и Web Storage (LocalStorage/SessionStorage)?

Ответ

Cookie и Web Storage (LocalStorage/SessionStorage) — это механизмы хранения данных на стороне клиента, но с разными целями и характеристиками.

Характеристика Cookie LocalStorage SessionStorage
Объем ~4 КБ на домен ~5-10 МБ на домен ~5-10 МБ на домен
Срок жизни Устанавливается вручную (Expires/Max-Age). Могут быть сессионными (до закрытия браузера). Сохраняются до явного удаления (JS или очистки браузера). Удаляются при закрытии вкладки/браузера.
Передача на сервер Автоматически отправляются с каждым HTTP-запросом (заголовки Cookie). Не отправляются автоматически. Доступны только через JavaScript. Не отправляются автоматически. Доступны только через JavaScript.
Доступ Доступны и на клиенте (document.cookie), и на сервере. Только на клиенте через window.localStorage. Только на клиенте через window.sessionStorage.
Синтаксис Строка в формате key=value, сложный парсинг. Простой API (setItem, getItem), работа с ключ-значением. Простой API (setItem, getItem), работа с ключ-значением.

Когда что использовать:

  • Cookie: Идентификация сессии (токены), персональные настройки, которые нужны серверу. Из-за ограниченного размера и накладных расходов не подходят для больших данных.
  • LocalStorage: Сохранение непередаваемых данных приложения (настройки UI, кэш), работа в оффлайн-режиме. Данные сохраняются между сессиями.
  • SessionStorage: Временное хранение данных в рамках одной вкладки (например, состояние многошаговой формы).

Пример работы с LocalStorage:

// Сохранить данные
localStorage.setItem('theme', 'dark');
localStorage.setItem('userPreferences', JSON.stringify({ fontSize: 14 }));

// Получить данные
const theme = localStorage.getItem('theme'); // 'dark'
const prefs = JSON.parse(localStorage.getItem('userPreferences')); // { fontSize: 14 }

// Удалить данные
localStorage.removeItem('theme');
// Очистить всё
localStorage.clear();

Ключевое отличие: Cookies предназначены для обмена небольшими порциями данных между клиентом и сервером, а Web Storage — это клиентская база данных ключ-значение для хранения больших объемов информации, не покидающей браузер.

Ответ 18+ 🔞

Давай разберем эту тему, а то тут, блядь, путаница у людей возникает, как будто они впервые видят браузер. Сидят, думают: "О, хранилище! Куда бы нахуярить свои данные?" А выбор-то есть, и он охуенно важен.

Смотри, есть три главных чувака на этой вечеринке: Cookie, LocalStorage и SessionStorage. И каждый из них — абсолютно разный мудак со своим характером.

Вот тебе разбор, чтобы ты не облажался.

Кто есть кто (или краткая сводка для тех, кто в танке)

Признак Cookie (Старый пердун) LocalStorage (Упрямый скряга) SessionStorage (Однодневка)
Сколько влезет Жалкие ~4 КБ на весь домен. Чихнёшь — и всё. Целых ~5-10 МБ. Уже похоже на дело. Тоже ~5-10 МБ, но...
Сколько проживёт Как скажешь. Можешь поставить срок, а можешь сделать "до закрытия браузера". Бессмертная сука. Пока её вручную не удалишь или браузер не снесёшь — будет сидеть. Однодневная бабочка. Закрыл вкладку — и пиздец, всё испарилось.
Лезет ли к серверу Да, этот приставучий уродец лезет в каждый HTTP-запрос! Заголовок Cookie — это он. Нет, блядь. Сидит себе тихо в браузере и никуда не шляется. Только JS его достанет. Тоже нет. Его удел — одна вкладка и больше ни хуя.
Кто его достанет И браузер (через document.cookie), и сервер (видит все куки в заголовках). Только твой JavaScript на клиенте (window.localStorage). Только JS, да и то в рамках одной вкладки (window.sessionStorage).
Как с ним общаться Ебался, простите, парсинг строки в формате ключ=значение. Адовый кошмар. Райский API: setItem, getItem. Всё просто, как три копейки. То же самое, что и у LocalStorage — просто и понятно.

Так когда кого вызывать, чтобы не опозориться?

  • Cookie: Это твой сессионный паспорт. Сюда — токены авторизации, ID сессии, какие-то мелкие настройки, которые нужны серверу. Больше 4 КБ не впихнёшь, да и не надо — он же с каждым запросом летит, как назойливая муха. Нахуй такую нагрузку?
  • LocalStorage: Это твой личный сейф в браузере. Сюда складывай всё, что должно пережить перезагрузку страницы, закрытие браузера и даже приход тёщи: настройки темы (тёмная/светлая), кэш каких-то данных для оффлайна, состояние интерфейса. Данные тут — надолго.
  • SessionStorage: Это блокнот для одной задачи. Открыл сложную форму на пять шагов — сохраняй состояние каждого шага сюда. Перешёл на другую вкладку — там уже своя сессия, свои данные. Закрыл вкладку с формой — и все промежуточные данные нахуй, как будто их и не было. Идеально для временщины.

Пример, как не облажаться с LocalStorage

Смотри, тут всё проще пареной репы:

// Запихнули данные в сейф
localStorage.setItem('theme', 'dark');
localStorage.setItem('userPrefs', JSON.stringify({ fontSize: 16, annoyingPopups: false }));

// Достали их обратно (осторожно, может быть null!)
const savedTheme = localStorage.getItem('theme'); // 'dark'
const prefs = JSON.parse(localStorage.getItem('userPrefs')); // { fontSize: 16, ... }

// Решили, что тема надоела — выкинули
localStorage.removeItem('theme');
// Всё охуели — очистили весь сейф
// localStorage.clear();

Итог, чтобы два раза не вставать: Cookies — это для общения клиента с сервером, маленькие и назойливые. Web Storage (Local/Session) — это твоя клиентская база данных, большая и молчаливая. Она никуда сама не лезет, ждёт, когда к ней обратятся.

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