Пробую сейчас всякие технологии веб-разработки. Был небольшой опыт на PHP и вот сейчас присмотрелся к Flask.
И у меня назрел такой вопрос: как реализовываются сессии в современных реалиях?
Какой туториал не открываю, что о PHP, что о Flask - всегда натыкаюсь на серверную реализацию сессий, где в куки файлах хранится идентификатор сессии на сервере, который, во вкладке Application браузера, так всегда и называется "session" или "SESSIONID".
Но что-то ничего подобного я не наблюдаю ни на Ютубе(очень страшно), ни на сайте OpenAI с ChatGPT(страшно), ни на Хабре...
(Ну, на хабре я вижу хотя бы UUID и в целом эта вкладка выглядит не так страшно, как у остальных)
Мне бы вообще хотелось бы узнать: какой способ хранения сессий наиболее правильный с точки зрения защиты данных(??? Если эти данные возможно перехватить, например не стоит же в куки файлах хранить пароль ???) и с точки зрения оптимизации (??? Если я буду хранить только UUID - значит другие данные пользователя нужно получать из БД при необходимости, каждый раз выполняя запрос. Не будет ли это вызывать чрезмерную нагрузку на сервер ???)
Для правильного вопроса надо знать половину ответа
Два базовых подхода - stateful и stateless.
В первом случае на сервере хранится состояние сессии, а в обмене с клиентом передаётся только идентификатор этого состояния (та самая кука SESSIONID). Где именно хранится состояние - в отдельном файле, базе данных или отдельном сервисе - определяется архитектурой системы.
Во втором случае состояние хранится в токене, например JWT. Этот токен формируется при аутентификации/авторизации пользователя, хранится на клиенте и передаётся при каждом запросе к серверу (либо в куках, либо в параметрах запроса). При распределённой системе сервер, выдающий токены может быть отделён от остальных а балансировщик может не беспокоиться, на какой именно сервер отправлять запрос.