Что такое куки и сессия и в чем их разница
Что проверяют
Различаете ли вы транспорт и хранилище состояния. Формулировка подталкивает противопоставить куки и сессии, а сильный ответ показывает, что обычно они работают вместе и на разных уровнях.
Как отвечать
Кука это механизм HTTP: пара имени и значения, которую хранит браузер и сам подставляет в запросы к своему домену. Сессия это состояние пользователя на сервере, живущее между запросами: корзина, шаг оформления, факт входа. Связывает их идентификатор сессии, который чаще всего и лежит в куке.
Отсюда отличия: кука на клиенте и доступна пользователю, сессия на сервере и клиенту не видна; кука ограничена парой килобайт, серверная запись хранит сколько нужно; куку можно удалить или подменить, данные сессии нет; сессия истекает по таймауту на сервере, даже если кука в браузере осталась.
Есть и вариант без серверного состояния: подписанный токен, где данные лежат в самой куке или в заголовке. Он масштабируется без общего хранилища, но мгновенно отозвать такой доступ сложно, и этот размен стоит назвать вслух.
Для тестировщика полезно добавить проверки: смена идентификатора после входа, инвалидация на сервере после выхода, поведение при одновременных сессиях на двух устройствах, истечение по бездействию и по абсолютному сроку.
Где спотыкаются
Говорят, что сессия исчезает при закрытии браузера. Закрывается браузер и пропадает сессионная кука, а запись на сервере живёт до таймаута: если идентификатор сохранить и подставить, доступ вернётся, и это типичная находка на проверке выхода.
Называют сессии безопасными по определению. Данные действительно на сервере, но весь доступ держится на одном идентификаторе: без флагов у куки, без смены идентификатора при входе и без ограничения срока его несложно украсть или навязать.
Считают куки и сессии взаимоисключающими вариантами и выбирают что-то одно. В типовом веб-приложении это два уровня одной схемы: кука переносит ключ, сессия хранит данные, а настоящая альтернатива сессии не кука, а подписанный токен.