Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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 обеспечивает безопасность приложения.