В чем разница между cookie и localStorage в веб-разработке?

Ответ

Cookie и localStorage — это механизмы хранения данных на стороне клиента с принципиально разными целями и характеристиками.

Ключевые различия

Характеристика Cookie localStorage
Объем До 4 КБ на домен 5-10 МБ на домен (зависит от браузера)
Срок жизни Может быть сессионным или иметь явный срок (expires/max-age) Сохраняется до явного удаления
Передача на сервер Автоматически отправляется с каждым HTTP-запросом (заголовок Cookie) Не отправляется автоматически
Доступность Доступен и на клиенте, и на сервере Только на клиенте через JavaScript
API Примитивный строковый интерфейс Простой API ключ-значение

Примеры использования

// Cookie - установка с атрибутами
document.cookie = "session_id=abc123; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/; Secure; HttpOnly";

// localStorage - простые операции
localStorage.setItem('userPreferences', JSON.stringify({ theme: 'dark', language: 'ru' }));
const prefs = JSON.parse(localStorage.getItem('userPreferences'));
localStorage.removeItem('userPreferences');

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

Используйте cookie для:

  • Аутентификации и сессий (с флагами HttpOnly и Secure)
  • Отслеживания пользователей (с согласия)
  • Сохранения небольших настроек, нужных серверу

Используйте localStorage для:

  • Кэширования данных приложения на клиенте
  • Сохранения пользовательских настроек интерфейса
  • Хранения больших объемов данных, не требующих серверной обработки

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

Ответ 18+ 🔞

Так, слушай, а вот этот ваш вечный спор про куки и локалсторадж, блядь. Сидят два фронтендера, один другому ебло прошибает — «у меня куки круче!», а второй орёт — «да ты нихуя не понимаешь, у меня пять мегабайт!». Ну, пиздец, давайте разбираться, пока не подрались, как Герасим с Муму.

Куки — это как старый, блядь, дедовский метод, ёпта. Маленький, дохуя не влезет — всего 4 килобайта на весь домен. Представь, пытаешься в карман от джинсов запихнуть арбуз — нихуя не выйдет. Но зато он, сука, вездесущий. Каждый раз, когда ты на сервер стучишься, он лезет в заголовки и орет: «Смотри, я тут, несите мне печеньки!». Сервер его видит, читает, может что-то своё дописать. И жить он может как угодно: до закрытия вкладки или до конкретной даты, которую ты ему впихнул.

// Вот так его, блядь, создаёшь, с кучей атрибутов, чтоб не сбежал
document.cookie = "auth_token=secret123; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/; Secure; HttpOnly";

А localStorage — это уже современный чувак, блядь. Типа большой шкаф в твоей квартире. Места — овердохуища, 5-10 мегабайт. Засунул туда что хотел, и оно лежит, пока сам не выкинешь или пользователь кэш не почистит. Но, внимание, ёпта — он молчун. На сервер сам ничего не отправляет, сидит себе тихо, ждёт, когда к нему через JS обратятся.

// Работать с ним — одно удовольствие, блядь. Никаких тебе строк с точками с запятой.
localStorage.setItem('userSettings', JSON.stringify({ theme: 'dark', notifications: false }));
const settings = JSON.parse(localStorage.getItem('userSettings')); // Достал, распаковал
localStorage.removeItem('userSettings'); // Надоело — выкинул нахуй

Так когда же что юзать, чтобы не выглядеть мудаком?

Тащи куки, если:

  • Делаешь авторизацию. Токены сессии, блядь, только туда, да с флагами HttpOnly и Secure, чтобы никакой левый JS до них не добрался. Это святое.
  • Серверу нужно что-то знать о клиенте в каждом запросе. Например, ID для аналитики (с согласия пользователя, ебать его в сраку, конечно).
  • Нужно сохранить какую-то мелкую хуйню, которая и фронту, и бэку пригодится.

Впендюривай localStorage, если:

  • Кэшируешь на клиенте тонну данных, чтобы не дергать АПИ каждые пять секунд. Список товаров, настройки интерфейса — идеально.
  • Пользователь настраивает внешний вид приложения (тема, язык, раскладка). Положил и забыл, пока сам не захочет поменять.
  • Работаешь оффлайн или делаешь прогрессивное веб-приложение. Тут без этого хранилища — просто пиздец.

И главное, запомни раз и нахуй: НИ ТО, НИ ДРУГОЕ НЕ ПОДХОДИТ ДЛЯ СЕКРЕТОВ! Пароли, номера карт, интимные фото — это всё на сервер, в нормальные сессии или специализированные хранилища. А то будет как в той истории: положил сокровище в сундук, а сундук этот на центральной площади стоит, и любой прохожий может заглянуть. Ядрёна вошь!