Чем cookie отличается от server-side session?
- Как сервер «помнит» пользователя между запросами?
Cookie — небольшие данные, которые хранит браузер и отправляет с каждым запросом к домену. Серверная сессия — данные на сервере, а в cookie лежит только её идентификатор (JSESSIONID).
- Сессия: данные не видны клиенту, но сервер их хранит — при нескольких экземплярах в Redis (Spring Session)
- Состояние в cookie (подписанный токен): сервер stateless, но размер ~4 КБ и сложный отзыв
- Флаги cookie: HttpOnly, Secure, SameSite
А ещё HTTP без состояния — cookie и есть способ его добавить
Подробно
HTTP без состояния — каждый запрос независим. Чтобы узнать пользователя, сервер должен что-то передать браузеру, а тот — возвращать.
Cookie: сервер отвечает Set-Cookie: name=value; Path=/; HttpOnly; Secure; SameSite=Lax, браузер сохраняет и прикладывает к последующим запросам к этому домену. Ограничения: ~4 КБ, уходит с каждым запросом, видна клиенту.
Серверная сессия: данные (кто вошёл, корзина) хранятся на сервере по случайному идентификатору; в cookie — только JSESSIONID. Плюсы: данные не видны и не подделываются клиентом, сессию легко завершить. Минусы: сервер хранит состояние — при нескольких экземплярах нужна общая сессия (Spring Session + Redis) или привязка клиента к экземпляру.
Токены вместо сессии (JWT в cookie или заголовке) — сервер не хранит состояние, проверяет подпись; цена — сложный отзыв.
Безопасность cookie: HttpOnly — недоступна из JavaScript (защита от кражи при XSS); Secure — только по HTTPS; SameSite=Lax/Strict — не отправляется с межсайтовыми запросами (защита от CSRF); смена идентификатора после входа (защита от фиксации сессии).
Что хотят услышать
- Где хранятся данные в каждом подходе.
- Связь сессии и cookie через идентификатор.
- Масштабирование сессий и альтернатива с токенами.
- Флаги безопасности cookie.
Частые ошибки
- Хранить сессии в памяти экземпляра при нескольких экземплярах.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Session хранится у клиента, а cookie — на сервере, и браузер шлёт её с запросами
- ✓Cookie хранится у клиента; server-side session — на сервере, а cookie несёт лишь её id
- ✗Это одно и то же
- ✗Cookie нельзя использовать для сессий
Что спросят дальше
- Что такое CSRF?
- Как работает JWT auth?
Разбор темы
- HTTP, cookies и сессии
Семантика HTTP-методов и кэширование, cookies и их флаги безопасности, stateful против stateless сессий, HTTPS и граница authn/authz.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.