Как использовать куки
Что проверяют
Понимаете ли вы, как куки ходят по HTTP и какие атрибуты защищают сессию. Следом обычно спрашивают, чем HttpOnly отличается от Secure, что делает SameSite и можно ли хранить в куке данные пользователя.
Как отвечать
Начните с механики. Сервер ставит куку заголовком Set-Cookie, браузер хранит её и сам отправляет обратно в заголовке Cookie на подходящие запросы. Одна кука ограничена примерно 4 КБ, поэтому в ней держат идентификатор, а не данные.
Атрибуты, которые стоит назвать:
Max-AgeиExpires: срок жизни. Без них кука сессионная и живёт до закрытия браузера;DomainиPath: на какие адреса она отправляется;HttpOnly: кука недоступна из JavaScript, через XSS её не украсть;Secure: отправка только по HTTPS;SameSite:Strict,LaxилиNone, защита от CSRF.NoneбезSecureбраузер отвергнет, а без атрибута Chrome считает кукуLax.
Потом покажите Python. В Django и Flask одна и та же пара: response.set_cookie(key, value, max_age=..., secure=True, httponly=True, samesite="Lax") и чтение из request.COOKIES или request.cookies, удаление через delete_cookie(). В FastAPI то же на объекте Response, а значение приходит параметром Cookie(). На стороне клиента куки между запросами хранит requests.Session.
Про сессии отдельно. В Django по умолчанию в куке лежит только ключ сессии, данные на сервере, SESSION_COOKIE_HTTPONLY включён сразу, а SESSION_COOKIE_SECURE на проде нужно включить самому. Во Flask session целиком хранится в куке: она подписана, но не зашифрована, и прочитать содержимое может любой.
Где спотыкаются
Кладут в куку роль, email или сумму заказа и доверяют ей на сервере. Кука целиком под контролем клиента, без подписи её подменят за минуту.
Удаляют куку с другими path или domain, чем ставили. Браузер считает это разными куками, и старая остаётся на месте.
Называют куки текстовыми файлами на компьютере и путают их с localStorage. Разница важна: куки уходят на сервер с каждым запросом, а localStorage нет, зато он открыт любому скрипту на странице.