Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что хранится в файлах Cookies?
Cookies (печенья) — это небольшие текстовые файлы, которые браузер сохраняет на клиентской машине и отправляет обратно серверу с каждым запросом. Они являются ключевым механизмом для хранения состояния и данных о пользователе в веб-приложениях.
Основное содержимое Cookie
Каждый cookie содержит следующие элементы:
-
Имя и значение (Name-Value pair) — основные данные
- Максимум 4 KB на один cookie
- Текстовый формат
-
Domain — домен, для которого действует cookie
- По умолчанию текущий домен
- Пример:
.example.com(применяется ко всем поддоменам)
-
Path — путь на сервере
- По умолчанию
/ - Браузер отправляет cookie только для запросов, совпадающих с этим путём
- По умолчанию
-
Expires/Max-Age — время жизни
Expires: конкретная дата и время истеченияMax-Age: время жизни в секундах- Если не указано — cookie удаляется при закрытии браузера (session cookie)
-
Secure — флаг безопасности
- Cookie отправляется только по HTTPS
- Защита от перехвата по незашифрованным каналам
-
HttpOnly — флаг доступа
- Изоляция от JavaScript (недоступна для document.cookie)
- Защита от XSS-атак
-
SameSite — защита от CSRF
Strict— не отправляется при кросс-сайтовых запросахLax— отправляется для безопасных методов (GET) при кросс-сайтовых переходахNone— отправляется всегда (требует Secure flag)
Пример структуры Cookie
// Заголовок ответа сервера (Set-Cookie):
// Set-Cookie: sessionId=abc123def456; Path=/; Domain=.example.com;
// Max-Age=3600; Secure; HttpOnly; SameSite=Lax
// Результат на клиенте:
// {
// name: sessionId,
// value: abc123def456,
// domain: .example.com,
// path: /,
// secure: true,
// httpOnly: true,
// sameSite: Lax,
// expiresAt: 2026-03-23T14:30:00Z
// }
Работа с Cookies в Java
На сервере (Servlet API)
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Cookie;
public void setUserCookie(HttpServletResponse response) {
String sessionId = generateSessionId();
Cookie cookie = new Cookie("sessionId", sessionId);
cookie.setPath("/");
cookie.setDomain(".example.com");
cookie.setMaxAge(3600);
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setAttribute("SameSite", "Lax");
response.addCookie(cookie);
}
public String readSessionId(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("sessionId".equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
public void deleteCookie(HttpServletResponse response) {
Cookie cookie = new Cookie("sessionId", "");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
Типичные используемые Cookies
| Cookie | Назначение |
|---|---|
| Session ID | Идентификация пользовательской сессии |
| Authentication Token | JWT или другой токен аутентификации |
| Preferences | Сохранение предпочтений пользователя |
| Tracking | Аналитика и отслеживание |
| Advertising | Таргетированная реклама |
Ограничения
- Размер: максимум 4 KB на один cookie
- Количество: браузер обычно хранит до 180 cookies на домен
- Видимость: видны в DevTools, могут быть просмотрены пользователем
- Безопасность: могут быть украдены при перехвате HTTPS без Secure flag
Best Practices
- Используй HttpOnly для cookies с чувствительной информацией
- Используй Secure для всех cookies (требует HTTPS)
- Установи SameSite для защиты от CSRF
- Минимизируй размер — передаются с каждым запросом
- Используй HTTPS для защиты данных в пути
- Устанавливай короткие TTL для session cookies
- Логируй доступ к критичным cookies
Key Takeaway
Cookies хранят пары имя-значение с метаданными контроля доступа и срока жизни, позволяя серверу отслеживать состояние клиента. Правильная конфигурация флагов (HttpOnly, Secure, SameSite) критична для безопасности веб-приложения.