Получить доступ

Чем cookie отличается от server-side session?

JuniorHTTP, cookies и сессииSpring
Ещё спрашивают так:
  • Как сервер «помнит» пользователя между запросами?
Коротко

Cookie — небольшие данные, которые хранит браузер и отправляет с каждым запросом к домену. Серверная сессия — данные на сервере, а в cookie лежит только её идентификатор (JSESSIONID).

  • Сессия: данные не видны клиенту, но сервер их хранит — при нескольких экземплярах в Redis (Spring Session)
  • Состояние в cookie (подписанный токен): сервер stateless, но размер ~4 КБ и сложный отзыв
  • Флаги cookie: HttpOnly, Secure, SameSite

А ещё HTTP без состояния — cookie и есть способ его добавить

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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.

Частые ошибки

  • Хранить сессии в памяти экземпляра при нескольких экземплярах.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Cookie хранится у клиента и шлётся браузером; server-side session хранит состояние на сервере, а cookie несёт лишь session id
  • ✗Session хранится у клиента, cookie — на сервере
  • ✗Это одно и то же
  • ✗Cookie нельзя использовать для сессий

Что спросят дальше

  • Что такое CSRF?
  • Как работает JWT auth?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем