← Назад к вопросам
Больше данных хранится в cookie или в localStorage
1.3 Junior🔥 251 комментариев
#Браузер и сетевые технологии
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Больше данных хранится в cookie или в localStorage
В localStorage хранится значительно больше данных, чем в cookie. Это основное различие между этими двумя механизмами хранения данных на клиенте.
Сравнение размеров
Cookie
- Размер одной cookie: обычно 4 KB (4096 байт)
- Общий лимит cookie на домен: примерно 180 KB (50-100 cookies)
- Различия по браузерам: Chrome, Firefox поддерживают разные лимиты
// Установка cookie (максимум 4 KB)
document.cookie = "userToken=abc123xyz; max-age=3600; path=/";
// Если превышить лимит — cookie не сохранится
const largeData = "x".repeat(5000);
document.cookie = `data=${largeData}"; // Не будет сохранена
localStorage
- Размер: обычно 5-10 MB на домен
- В Chrome: 10 MB
- В Firefox: 10 MB
- В Safari: 5 MB
- В IE: 10 MB
// localStorage может хранить до 10 MB
localStorage.setItem("largeData", "x".repeat(1000000)); // 1 MB
// Проверка доступного размера
try {
localStorage.setItem("test", "x".repeat(1000));
console.log("Available space");
} catch (e) {
if (e.name === "QuotaExceededError") {
console.log("Storage limit exceeded");
}
}
Таблица сравнения
Параметр | Cookie | localStorage
------------------|---------------|---------------
Максимум на домен | 4-180 KB | 5-10 MB
Одна единица | 4 KB | N/A (весь лимит)
Отправляется с | Каждый запрос | Нет (только JS)
Типография | Текст | Текст (JSON)
Сроком | Настраиваемый | Не выберет
Доступ с сервера | Да | Только клиент
XSS защита | Нет (уязвима) | Нет (уязвима)
Почему cookie меньше
1. Историческая причина
Cookie были изобретены в конце 1990-х, когда интернет был медленнее. Маленький размер был ограничением браузеров того времени.
2. Cookie отправляются с каждым запросом
// Когда браузер отправляет запрос на сервер
fetch("/api/users")
// Автоматически добавляется: Cookie: sessionId=xyz; userToken=abc
Большие cookie замедляют все HTTP запросы. Поэтому браузеры ограничили размер.
3. localStorage только на клиенте
// localStorage НЕ отправляется на сервер
localStorage.setItem("userPreferences", JSON.stringify({...})); // OK 10 MB
// Для отправки данных нужно явно вызвать fetch
const data = localStorage.getItem("userPreferences");
await fetch("/api/preferences", {
method: "POST",
body: data
});
Практические примеры
Cookie: Маленькие данные
// Хороший пример: аутентификация токена
document.cookie = "sessionToken=xyz123abc; max-age=86400; path=/; Secure; SameSite=Strict";
// Хороший пример: простые настройки
document.cookie = "theme=dark; max-age=2592000; path=/";
// Плохой пример: большой объект
const user = {id: 1, name: "Алиса", ...};
document.cookie = `user=${JSON.stringify(user)}`; // Будет обрезано
localStorage: Больше данных
// Хороший пример: кэш API данных
const users = [
{id: 1, name: "Алиса", email: "alice@example.com"},
{id: 2, name: "Боб", email: "bob@example.com"},
// ... может быть много юзеров
];
localStorage.setItem("cachedUsers", JSON.stringify(users)); // OK
// Хороший пример: черновики форм
const draftBlogPost = {
title: "Название статьи",
content: "Длинный текст статьи...", // Может быть очень длинным
tags: ["javascript", "web"],
images: ["...base64-encoded images..."]
};
localStorage.setItem("draftPost", JSON.stringify(draftBlogPost)); // OK
// Хороший пример: локальное приложение (offline-first)
const appState = {
tasks: [...],
notes: [...],
documents: [...]
};
localStorage.setItem("appState", JSON.stringify(appState)); // OK
Как узнать доступный размер
function getStorageInfo() {
// Для localStorage
const testData = "test";
const testKey = "__storageTest";
try {
localStorage.setItem(testKey, testData);
localStorage.removeItem(testKey);
console.log("localStorage доступен");
} catch (e) {
console.log("localStorage недоступен");
}
// Для cookie
const testCookie = "test=123";
document.cookie = testCookie;
if (document.cookie.includes("test")) {
console.log("Cookies доступны");
}
}
// Проверка QuotaExceededError
function checkStorageSpace() {
let size = 0;
try {
for (let i = 0; i < 1000000; i++) {
const test = "x".repeat(1024);
localStorage.setItem(`test_${i}`, test);
size += 1024;
}
} catch (e) {
if (e.name === "QuotaExceededError") {
console.log(`Storage limit at: ${size} bytes`);
// Очищаем тестовые данные
const keys = Object.keys(localStorage);
keys.forEach(k => {
if (k.startsWith("test_")) localStorage.removeItem(k);
});
}
}
}
Когда использовать что
Используй Cookie для:
- Аутентификационные токены (HTTP-only для безопасности)
- Идентификация сессии
- Отслеживание пользователей (analytics)
- Маленькие персональные настройки
Используй localStorage для:
- Кэширование API ответов
- Черновики форм (offline support)
- Пользовательские настройки (темы, язык)
- Состояние приложения
- Большие объемы данных
Безопасность
// Cookie
// Уязвимость: XSS может украсть данные
// Защита: используй HttpOnly флаг (работает только на сервере)
response.setCookie("token", value, {
httpOnly: true, // Недоступна для JavaScript
secure: true, // Только HTTPS
sameSite: "Strict"
});
// localStorage
// Уязвимость: любой JavaScript может прочитать
const token = localStorage.getItem("token");
// XSS атака: alert(localStorage.getItem("token"));
// Защита: регулярно очищай неиспользуемые данные
Вывод
localStorage может хранить в 25-2500 раз больше данных, чем cookie. Выбор между ними зависит от типа данных:
- Cookie — для маленьких данных, которые нужно отправлять на сервер
- localStorage — для больших данных, которые нужны только на клиенте