Как работает cookie
Что проверяют
Понимаете ли вы механику на уровне HTTP-заголовков и атрибутов, а не только «браузер что-то сохраняет». Следом обычно спрашивают про безопасность: чем HttpOnly отличается от SameSite и почему токен в localStorage уязвимее.
Как отвечать
Начните с цикла: сервер присылает заголовок Set-Cookie, браузер сохраняет пару имя и значение и в каждом следующем подходящем запросе сам добавляет заголовок Cookie. Какой запрос подходящий, определяют атрибуты:
DomainиPath: к каким хостам и путям cookie прикладывается. БезDomainона привязана только к текущему хосту, без поддоменов;ExpiresиMax-Age: срок жизни. Без них cookie сессионная и живёт до закрытия браузера. Chrome обрезает срок до 400 дней;Secure: отправка только по HTTPS;HttpOnly: cookie недоступна изdocument.cookie, поэтому внедрённый через XSS скрипт её не прочитает;SameSite:Strict,LaxилиNone, основная защита от CSRF. Без атрибута браузеры на Chromium считают значениеLax, аNoneработает только вместе сSecure;- префиксы
__Host-и__Secure-: браузер отклонит cookie, если она выставлена без нужных атрибутов.
Для фронтенда важны ещё две вещи. Кросс-доменный fetch по умолчанию cookie не шлёт, нужен credentials: 'include', а сервер обязан ответить Access-Control-Allow-Credentials: true с конкретным origin вместо *. И объём: около 4 КБ на одну cookie, а весь набор уезжает в каждом запросе, включая картинки и скрипты с того же домена.
Про сторонние cookie: Safari и Firefox блокируют их по умолчанию, Chrome от такого отключения отказался. Для встроенных виджетов есть атрибут Partitioned (CHIPS).
Где спотыкаются
Путают HttpOnly и Secure: первый прячет cookie от JavaScript, второй отвечает за транспорт. От CSRF не защищает ни один из них, это задача SameSite и CSRF-токенов.
Считают, что SameSite=Lax полностью закрывает CSRF. Переход по ссылке методом GET cookie несёт, поэтому GET-обработчики не должны менять данные.
Хранят в cookie профиль пользователя целиком. Такие данные раздувают каждый запрос и видны пользователю, если не подписаны и не зашифрованы.