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

Каким временем ограничен Cookies?

1.3 Junior🔥 162 комментариев
#Теория тестирования

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

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

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

Время жизни Cookies: Сроки хранения данных на стороне клиента

Время жизни (срок действия) cookies — один из фундаментальных аспектов веб-разработки, тесно связанный с безопасностью, пользовательским опытом и корректной работой приложений. Как QA Engineer, я рассматриваю эту тему не только с точки зрения реализации, но и через призму тестирования различных сценариев. Срок жизни cookie определяется при его создании на сервере с помощью атрибута Expires или Max-Age.

Основные типы cookies по времени жизни

  1. Сессионные cookies (Session Cookies):
    *   **Срок жизни**: Существуют только в течение текущей **сессии браузера**. Сессия обычно завершается при закрытии всех вкладок/окон браузера (хотя поведение может немного отличаться, например, при восстановлении сессии).
    *   **Как создаются**: Устанавливаются без атрибутов `Expires` или `Max-Age`. Их время жизни управляется браузером.
    *   **Использование**: Хранение временных данных, таких как содержимое корзины покупок, токены для нечувствительных операций в течение одного сеанса.
    *   **Тестирование**: Для проверки необходимо:
        *   Закрыть браузер полностью и открыть его заново — cookie должен исчезнуть.
        *   Проверить поведение при использовании "Восстановить предыдущую сессию" — некоторые браузеры могут сохранять такие cookie.

  1. Постоянные cookies (Persistent / Permanent Cookies):
    *   **Срок жизни**: Определяется явно заданной датой истечения срока действия (`Expires`) или продолжительностью в секундах (`Max-Age`). Могут существовать дни, месяцы или годы, пока пользователь не очистит хранилище cookie вручную или не истечет их срок.
    *   **Как создаются**: Устанавливаются с одним из атрибутов:
        *   `Expires=<Дата в формате GMT>` (например, `Expires=Fri, 31 Dec 2024 23:59:59 GMT`).
        *   `Max-Age=<Количество секунд>` (например, `Max-Age=31536000` для года).
    *   **Использование**: Авторизация ("Запомнить меня"), настройки пользователя (тема, язык), аналитика, отслеживание.
    *   **Тестирование**:
        *   Проверить корректность установки даты/времени с сервера.
        *   Убедиться, что cookie перестает отправляться браузером после истечения срока.
        *   Проверить обновление срока жизни при повторной установке cookie.

Практический пример установки cookie с временем жизни

Вот как сервер может отправить cookie с разными сроками действия, используя HTTP-заголовок Set-Cookie:

# Сессионный cookie (исчезнет при закрытии браузера)
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure

# Постоянный cookie с указанием даты истечения (до 31 декабря 2024)
Set-Cookie: user_token=xyz789; Expires=Fri, 31 Dec 2024 23:59:59 GMT; Path=/; HttpOnly; Secure

# Постоянный cookie с указанием максимального возраста (1 год = 365 дней * 24 часа * 3600 секунд)
Set-Cookie: preference=dark_theme; Max-Age=31536000; Path=/; Secure

На стороне клиента (JavaScript) время жизни также можно задать через свойство expires (строка с датой) или max-age (в секундах):

// Установка cookie на 7 дней через max-age
document.cookie = "username=John; max-age=" + (7 * 24 * 60 * 60) + "; path=/; secure";

// Установка cookie через expires (устаревший, но поддерживаемый способ)
let expirationDate = new Date();
expirationDate.setDate(expirationDate.getDate() + 30);
document.cookie = "language=ru; expires=" + expirationDate.toUTCString() + "; path=/";

Ключевые аспекты для тестирования времени жизни cookies

  • Валидация атрибутов Expires и Max-Age: Убедиться, что сервер корректно формирует эти значения в соответствии с бизнес-логикой (например, "запомнить на 30 дней").
  • Поведение при истечении срока: Проверить, что приложение корректно обрабатывает ситуацию, когда устаревший cookie более не валиден (например, перенаправляет на страницу входа, сбрасывает настройки к дефолтным).
  • Влияние системного времени: Важный кейс! Если пользователь меняет дату/время на своем устройстве, это может повлиять на расчет срока действия cookie, особенно при использовании Expires. Для Max-Age это влияние меньше, так как отсчет ведется с момента получения.
  • Синхронизация между вкладками и окнами: Сессионные cookie должны быть доступны во всех вкладках и окнах текущего сеанса браузера.
  • Очистка хранилища: Проверить, что cookie удаляются корректно как при истечении срока, так и при ручной очистке кэша браузера пользователем.
  • Разные браузеры и устройства: Поведение может отличаться, особенно для сессионных cookie. Необходимо кросс-браузерное тестирование.

Безопасность и приватность

С точки зрения безопасности, длительное время жизни cookie увеличивает риск компрометации данных, если устройство или сам cookie будут перехвачены. Поэтому для критичных данных (токены аутентификации) рекомендуется использовать относительно короткие сроки жизни в сочетании с механизмами обновления токенов. Современные практики также предполагают использование атрибутов HttpOnly (запрет доступа из JavaScript для защиты от XSS) и Secure (передача только по HTTPS), которые хоть и не влияют напрямую на время жизни, но критически важны для безопасности данных в cookie на всем протяжении их существования.

Вывод для QA: Тестирование времени жизни cookie — это не только проверка даты в заголовке. Это комплексная задача, включающая валидацию бизнес-логики, поведения приложения в edge-случаях (истечение срока, смена времени), кросс-браузерную совместимость и соблюдение стандартов безопасности. Понимание механизмов Expires и Max-Age позволяет грамотно проектировать тест-кейсы для проверки устойчивости и корректности работы авторизации, персональных настроек и других функций, зависящих от постоянного хранения данных на клиенте.