При первом запросе сервер создаёт session_id, сохраняет данные сессии и отправляет session_id в cookie. Каждый последующий запрос содержит cookie с session_id — сервер находит данные и «узнаёт» пользователя.
Сессия — состояние на сервере, JWT — состояние в токене (на клиенте). Сессию можно сразу отозвать, JWT — только после истечения срока или через blacklist. Сессии лучше для традиционных веб-приложений, JWT — для stateless API и микросервисов.