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

Что такое куки?

2.2 Middle🔥 113 комментариев
#Soft skills и карьера

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

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

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

Что такое Cookies (Куки)

Cookies (куки, HTTP cookies) — это небольшие текстовые файлы, которые веб-сервер отправляет браузеру пользователя и которые браузер сохраняет на устройстве пользователя (компьютере, смартфоне). Затем браузер возвращает эти куки серверу при каждом последующем запросе к тому же сайту. Основная цель куки — сохранять состояние между клиентом и сервером, что позволяет реализовать такие функции, как аутентификация, сохранение настроек, отслеживание сессий и персонализация контента.

Основные технические характеристики

  • Место хранения: Локально на устройстве пользователя, в памяти браузера.
  • Структура данных: Простой текст, обычно в формате пар ключ=значение.
  • Передача: Автоматически включаются в заголовки HTTP-запросов (Cookie) и ответов (Set-Cookie).
  • Ассоциация: Привязываются к конкретному домену (и иногда пути), что обеспечивает безопасность и предотвращает доступ других сайтов к данным.

Основные типы куки и их цели

  1. Сессионные куки (Session Cookies):
    *   Временные, хранятся только во время сессии браузера (до его закрытия).
    *   Используются для управления состоянием одной посещения, например, для сохранения данных формы или идентификатора сессии на сервере.
    *   Не имеют установленного времени жизни (`Expires` или `Max-Age`).

  1. Постоянные куки (Persistent Cookies):
    *   Сохраняются на устройстве после закрытия браузера до истечения их срока жизни.
    *   Устанавливаются с помощью атрибутов `Expires` (дата истечения) или `Max-Age` (максимальный возраст в секундах).
    *   Используются для функций типа "Remember me" при логине, сохранения языковых настроек или аналитики.

  1. Сторонние куки (Third-party Cookies):
    *   Создаются доменом, отличающимся от домена основной посещаемой страницы (например, куки рекламной сети или сервиса аналитики, встроенных через `<iframe>` или скрипт).
    *   Часто используются для отслеживания пользователей между сайтами и таргетированной рекламы.
    *   В современных браузерах часто блокируются по умолчанию из-за политик приватности.

Ключевые атрибуты куки (в заголовке Set-Cookie)

При установке куки сервер может задавать дополнительные атрибуты для управления их поведением и безопасностью:

  • Name и Value: Основные данные.
  • Domain: Определяет, к какому домену и его поддоменам куки принадлежат.
  • Path: Ограничивает отправку куки только для запросов к определенному пути на сервере.
  • Expires / Max-Age: Устанавливают срок жизни постоянной куки.
  • Secure: Флаг, требующий передачи куки только по защищенному HTTPS-протоколу.
  • HttpOnly: Флаг, запрещающий доступ к куки через JavaScript (например, через document.cookie). Критически важно для защиты от атак типа XSS (Cross-Site Scripting), чтобы предотвратить steal сессионных куки.
  • SameSite: Новый атрибут для контроля, когда куки отправляются с cross-site запросами. Значения:
    *   `Strict`: Куки отправляются только в рамках одного сайта (same-site).
    *   `Lax`: Куки отправляются при переходе по ссылке (top-level navigation), но не при cross-site POST-запросах или загрузках через `<iframe>`.
    *   `None`: Куки отправляются при любых cross-site запросах (обычно требует одновременного наличия атрибута `Secure`).

Пример работы с куки в контексте тестирования (QA)

Как QA Engineer, важно понимать, как проверять и валидировать работу куки. Это можно делать через браузерные инструменты или в автотестах.

Проверка в браузере (Chrome DevTools):

  1. Открыть Developer Tools (F12).
  2. Перейти в раздел Application или Storage.
  3. В левой панели выбрать Cookies и нужный домен.
  4. Проверить наличие, значения и атрибуты куки (HttpOnly, Secure, SameSite).

Пример простой проверки наличия сессионной куки после логина в автотесте (Python + Selenium):

from selenium import webdriver

# Инициализация драйвера
driver = webdriver.Chrome()
driver.get("https://example.com/login")

# Выполнение логина
driver.find_element_by_id("username").send_keys("test_user")
driver.find_element_by_id("password").send_keys("password123")
driver.find_element_by_id("submit").click()

# Получение всех куки после логина
all_cookies = driver.get_cookies()
print("Все куки после логина:", all_cookies)

# Поиск конкретной сессионной куки (например, 'session_id')
session_cookie = None
for cookie in all_cookies:
    if cookie['name'] == 'session_id':
        session_cookie = cookie
        break

# Валидация
assert session_cookie is not None, "Сессионная куки 'session_id' не найдена!"
assert 'value' in session_cookie, "Сессионная куки не имеет значения!"
# Проверка, что куки является сессионной (без 'expiry')
assert 'expiry' not in session_cookie, "Куки 'session_id' должна быть сессионной (без expiry)!"

print(f"Сессионная куки найдена: {session_cookie['name']} = {session_cookie['value']}")
driver.quit()

Важные аспекты для тестирования

  • Безопасность: Проверяйте наличие атрибутов HttpOnly и Secure для критических куки (сессионных, аутентификации).
  • Правила SameSite: Убедитесь, что куки настроены правильно в соответствии с бизнес>логикой (например, SameSite=Lax для сессионных куки).
  • Очистка (Clearing): Проверяйте, как система реагирует на удаление куки пользователем (выход из системы, потеря данных).
  • Cross>domain: Если приложение использует несколько доменов, проверьте корректную работу и передачу куки между ними.
  • Конфиденциальность (Privacy): Учитывайте требования законодательства (например, GDPR), которые могут требовать получения согласия пользователя перед установкой определенных куки.

Таким образом, куки являются фундаментальным механизмом веб>разработки для поддержания состояния и персонализации. Для QA Engineer глубокое понимание их работы, типов и атрибутов безопасности необходимо для проведения эффективного тестирования функциональности, безопасности и соответствия требованиям современных веб>приложений.