← Назад к вопросам

Можно ли создать Cookies на клиенте?

2.2 Middle🔥 131 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Можно ли создать Cookies на клиенте?

Да, Cookies можно создавать на клиенте (в браузерной среде) с помощью JavaScript. Это один из фундаментальных механизмов работы с данными, которые хранятся на стороне пользователя. Однако важно понимать ограничения, различия между клиентскими и серверными cookies, а также современные альтернативы.

Создание Cookies через JavaScript

Для создания, чтения и удаления cookies на клиенте используется свойство document.cookie. Это строка, содержащая все cookies для текущего документа, доступные для чтения и записи.

Пример создания простого cookie

// Создание cookie с именем "username" и значением "JohnDoe"
document.cookie = "username=JohnDoe";

При такой записи cookie будет создан без дополнительных атрибутов. Он станет сессионным cookie (удаляется при закрытии браузера) и будет доступен для текущего пути и домена.

Создание cookie с дополнительными атрибутами

Для контроля поведения cookie необходимо указывать атрибуты: expires или max-age, path, domain, secure, SameSite.

// Создание cookie с сроком жизни, path и флагом secure
document.cookie = "sessionToken=abc123; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/; secure";

В более структурированном виде это можно реализовать через функцию:

function setCookie(name, value, days, path = '/') {
  const expires = new Date();
  expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
  document.cookie = `${name}=${value}; expires=${expires.toUTCString()}; path=${path}`;
}

// Использование: cookie будет храниться 7 дней
setCookie('userTheme', 'dark', 7);

Ключевые ограничения и особенности клиентских Cookies

  • Доступность по домену и пути: Cookie, созданный на клиенте, подчиняется тем же правилам domain и path, что и серверный. Вы не можете создать cookie для другого домена.
  • Атрибуты безопасности: Атрибуты secure (только для HTTPS) и SameSite (ограничение кросс-сайтовых запросов) можно установить, но их необходимо учитывать в контексте безопасности приложения.
  • Размер и количество: Ограничения браузера (обычно ~4KB на cookie, ~50 cookies на домен) одинаковы для клиентских и серверных cookies.
  • Только строка: Значением cookie может быть только строка. Для хранения объектов необходимо использовать JSON.stringify().
// Сохранение объекта в cookie
const userPrefs = { theme: 'dark', language: 'ru' };
document.cookie = `prefs=${JSON.stringify(userPrefs)}; max-age=3600`;

Различия между клиентскими и серверными Cookies

  • Источник создания: Серверные cookies создаются через HTTP-заголовок Set-Cookie в ответе, клиентские — через JS.
  • Контекст использования: Сервер часто использует cookies для сессий, аутентификации (sessionId), клиент — для менее критичных данных: темы интерфейса, временных меток.
  • Доступность при первой загрузке: Cookie, установленный сервером, доступен при первом запросе страницы. Клиентский cookie будет доступен только после выполнения JS.

Современные альтернативы и лучшие практики

В современных Frontend-приложениях для хранения данных на клиенте часто используют более специализированные API:

  1. LocalStorage и SessionStorage: Part of Web Storage API. Позволяют хранить больше данных (обычно ~5-10MB) в формате ключ-значение. Не отправляются автоматически на сервер.

    // Использование localStorage
    localStorage.setItem('theme', 'dark');
    const theme = localStorage.getItem('theme');
    
  2. IndexedDB: Для сложных структур данных и больших объемов. Асинхронная, транзакционная база данных в браузере.

  3. Cookie vs Storage: Для данных, которые необходимо отправлять на сервер с каждым HTTP-запросом (например, токен аутентификации), используются cookies (особенно с флагом secure и SameSite=Strict). Для локальных настроек UI лучше использовать localStorage.

Пример комплексного управления cookies на клиенте

class CookieManager {
  static set(name, value, options = {}) {
    let cookieString = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
    
    if (options.expires) {
      cookieString += `; expires=${options.expires.toUTCString()}`;
    } else if (options.maxAge) {
      cookieString += `; max-age=${options.maxAge}`;
    }
    
    if (options.path) cookieString += `; path=${options.path}`;
    if (options.domain) cookieString += `; domain=${options.domain}`;
    if (options.secure) cookieString += `; secure`;
    if (options.sameSite) cookieString += `; SameSite=${options.sameSite}`;
    
    document.cookie = cookieString;
  }
  
  static get(name) {
    const cookies = document.cookie.split(';');
    for (let cookie of cookies) {
      const [key, val] = cookie.trim().split('=');
      if (key === name) return decodeURIComponent(val);
    }
    return null;
  }
  
  static delete(name) {
    document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
  }
}

// Использование класса
CookieManager.set('authToken', 'xyz789', { maxAge: 3600, secure: true, sameSite: 'Strict' });
const token = CookieManager.get('authToken');
CookieManager.delete('authToken');

Итог: Создание cookies на клиенте — полностью возможная и часто используемая операция. Однако в современных разработке важно оценивать необходимость: если данные нужны только в браузере, более подходящими могут быть localStorage или sessionStorage. Cookies остаются незаменимыми для передачи данных между клиентом и сервером автоматически, особенно в контексте аутентификации и сессий. При работе с ними всегда необходимо учитывать атрибуты безопасности (secure, SameSite) для защиты пользовательских данных.