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

Что такое атрибут Max-Age в cookie?

1.3 Junior🔥 191 комментариев
#JavaScript Core

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Max-Age атрибут в Cookies

Max-Age - это один из самых важных атрибутов cookie, который определяет, сколько времени cookie будет жить в браузере.

Определение и назначение

Max-Age определяет время жизни cookie в секундах

Маx-Age указывает, через сколько секунд с момента установки cookie браузер должен удалить его:

// На стороне сервера (пример на Node.js + Express)
response.cookie('session', 'abc123', {
  maxAge: 3600000 // 1 час в миллисекундах (для Express)
});

// Эквивалент в HTTP заголовках
// Set-Cookie: session=abc123; Max-Age=3600
// (Max-Age в секундах, не миллисекундах!)

Важно: Max-Age указывается в СЕКУНДАХ, а не миллисекундах!

Как браузер использует Max-Age

// Сервер отправляет
// Set-Cookie: sessionId=xyz789; Max-Age=86400

// Браузер:
// 1. Получает текущее время: 2024-01-15 10:00:00
// 2. Добавляет 86400 секунд (24 часа)
// 3. Вычисляет время истечения: 2024-01-16 10:00:00
// 4. Автоматически удаляет cookie в это время

Примеры использования

Временные cookies (сессионные)

// 1 час
response.setHeader('Set-Cookie', 'token=abc123; Max-Age=3600; Path=/');

// 24 часа
response.setHeader('Set-Cookie', 'userId=456; Max-Age=86400; Path=/');

// 30 дней
response.setHeader('Set-Cookie', 'preferences=dark; Max-Age=2592000; Path=/');

С другими атрибутами

// На практике часто используется вместе с другими параметрами
response.cookie('auth', 'token123', {
  maxAge: 3600000,        // 1 час (в миллисекундах для Express)
  httpOnly: true,         // недоступна для JavaScript
  secure: true,           // только через HTTPS
  sameSite: 'Strict',     // CSRF protection
  path: '/api'            // доступна только в /api
});

// Эквивалент в HTTP:
// Set-Cookie: auth=token123; Max-Age=3600; HttpOnly; Secure; SameSite=Strict; Path=/api

Max-Age vs Expires

Обе опции решают одну задачу, но по-разному

// Max-Age - указываешь количество секунд
// Set-Cookie: session=abc; Max-Age=3600

// Expires - указываешь конкретную дату и время
// Set-Cookie: session=abc; Expires=Mon, 15-Jan-2024 11:00:00 GMT

// Какой использовать?
// Max-Age имеет ПРИОРИТЕТ, если оба указаны
// Max-Age предпочтительнее, так как не зависит от часового пояса сервера

Практический пример приоритета

// Если указаны оба параметра
response.setHeader('Set-Cookie', 
  'token=xyz; Max-Age=3600; Expires=Mon, 15-Jan-2024 11:00:00 GMT'
);

// Браузер использует Max-Age=3600 (приоритет выше)
// Expires используется только если Max-Age не поддерживается (старые браузеры)

Управление cookies через JavaScript

Чтение значения Max-Age невозможно из браузера

// JavaScript может читать только значения cookie
console.log(document.cookie);
// Output: "session=abc123; userId=456"

// НО не может прочитать Max-Age, HttpOnly, Secure и другие атрибуты
// Эти параметры известны только браузеру

// Если cookie установлена с HttpOnly=true, JavaScript вообще не может её видеть

Установка cookies из JavaScript

JavaScript может устанавливать cookies, но без некоторых защитных атрибутов:

// JavaScript может установить cookie так:
document.cookie = 'theme=dark; max-age=3600; path=/; SameSite=Lax';

// Однако JavaScript НЕ МОЖЕТ установить:
// - HttpOnly (защита от XSS)
// - Secure без HTTPS (защита от MITM)
// Это защита браузера

Примеры значений Max-Age

// Распространённые значения

// 1 минута
Max-Age: 60

// 1 час
Max-Age: 3600

// 24 часа (1 сутки)
Max-Age: 86400

// 7 дней
Max-Age: 604800

// 30 дней
Max-Age: 2592000

// 1 год
Max-Age: 31536000

// Удаление cookie (установить время в прошлое)
Max-Age: 0 // или отрицательное значение
Max-Age: -1

Удаление cookie

Способ 1: Max-Age=0

// На сервере
response.clearCookie('sessionId'); // Express автоматически устанавливает Max-Age=0

// Эквивалент
response.setHeader('Set-Cookie', 'sessionId=; Max-Age=0; Path=/');

Способ 2: из JavaScript

// Установить cookie с временем в прошлое
document.cookie = 'sessionId=; max-age=0; path=/';

// Или используя дату
const date = new Date();
date.setTime(date.getTime() - (1000 * 60 * 60 * 24)); // минус 1 день
document.cookie = `sessionId=; expires=${date.toUTCString()}; path=/`;

Важные правила Max-Age

1. Max-Age в секундах (не миллисекундах)

// Неправильно для HTTP
Max-Age: 3600000 // это 1000 часов, не 1 час!

// Правильно
Max-Age: 3600 // 1 час

2. Max-Age=0 означает удалить cookie

Max-Age: 0 // cookie удалится сразу

3. Без Max-Age - session cookie

// Set-Cookie: token=abc123; Path=/
// Без Max-Age - cookie удалится при закрытии браузера (session cookie)

4. Отрицательные значения также удаляют cookie

Max-Age: -1 // cookie удалится немедленно
Max-Age: -100 // то же самое

Реальный пример с Express

const express = require('express');
const app = express();

// Установка cookie
app.get('/login', (req, res) => {
  res.cookie('authToken', 'user123token456', {
    maxAge: 24 * 60 * 60 * 1000, // 24 часа в миллисекундах (Express конвертирует в секунды)
    httpOnly: true,              // защита от XSS
    secure: true,                // только HTTPS
    sameSite: 'Strict'           // CSRF protection
  });
  res.send('Logged in');
});

// Удаление cookie
app.get('/logout', (req, res) => {
  res.clearCookie('authToken'); // автоматически Max-Age=0
  res.send('Logged out');
});

app.listen(3000);

Заключение

Max-Age - это критически важный атрибут cookie, который контролирует, как долго браузер будет хранить cookie. Это основной механизм управления временем жизни данных на клиенте. Max-Age указывается в секундах и имеет приоритет над атрибутом Expires. Правильное использование Max-Age вместе с HttpOnly, Secure и SameSite обеспечивает безопасность приложения.