Два базовых подхода - stateful и stateless.
В первом случае на сервере хранится состояние сессии, а в обмене с клиентом передаётся только идентификатор этого состояния (та самая кука SESSIONID). Где именно хранится состояние - в отдельном файле, базе данных или отдельном сервисе - определяется архитектурой системы.
Во втором случае состояние хранится в токене, например JWT. Этот токен формируется при аутентификации/авторизации пользователя, хранится на клиенте и передаётся при каждом запросе к серверу (либо в куках, либо в параметрах запроса). При распределённой системе сервер, выдающий токены может быть отделён от остальных а балансировщик может не беспокоиться, на какой именно сервер отправлять запрос.