Какими способами задается время жизни HTTP-кук (cookies)?

«Какими способами задается время жизни HTTP-кук (cookies)?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Время жизни HTTP-куки управляется двумя атрибутами:

1. Атрибут Max-Age (приоритетный):

  • Указывает максимальный срок жизни куки в секундах с момента установки.
  • Кука автоматически удаляется браузером по истечении этого времени.

2. Атрибут Expires (устаревший, но поддерживаемый):

  • Указывает абсолютную дату и время истечения в формате GMT.
  • После этой даты кука считается недействительной.

Типы кук по сроку жизни:

  • Сессионные (Session Cookies): Не имеют атрибутов Max-Age или Expires. Удаляются при закрытии браузера (точнее, сессии).
  • Постоянные (Persistent Cookies): Имеют заданный Max-Age или Expires. Хранятся на диске и пересылаются до истечения срока.

Примеры установки:

# HTTP-заголовок ответа сервера для установки куки на 1 день
Set-Cookie: sessionid=abc123; Max-Age=86400; Path=/; HttpOnly
// Установка куки с помощью JavaScript на 7 дней
const days = 7;
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
const expires = "expires=" + date.toUTCString();
document.cookie = "username=John; " + expires + "; path=/";

Ограничения: Максимальный срок жизни зависит от браузера (обычно несколько лет, например, 400 дней в Chrome). Куки с датой истечения в далеком будущем могут быть обрезаны до максимально допустимого лимита браузера.