Прежде всего, если вы сами не создаете вещи только потому, что хотите научиться делать все это самостоятельно, на самом деле нет причин заново изобретать вещи, которые уже были хорошо спроектированы в существующих модулях. Поскольку это код на стороне сервера, на самом деле нет штрафов за использование уже протестированного модуля, который делает то, что вы хотите. Итак, моей первой рекомендацией было бы использовать Express и express-session. Он выполняет все функции управления сессиями за вас и даст вам гораздо больше времени для работы над аспектами вашего проекта, которые действительно помогут ему добиться успеха или провала.
И главное преимущество использования node.js в первую очередь - это возможность использовать огромную библиотеку существующего кода, доступного через NPM и Github.
Концептуально, вот как работает сеанс в мире клиент / сервер node.js / веб-браузера.
- Входящий запрос от клиента на веб-сервер.
- Сервер создает какое-то гарантированное уникальное значение cookie и устанавливает его в качестве cookie в ответе.
- Сервер также создает объект сеанса на стороне обслуживания и помещает этот объект в некоторое хранилище данных со значением cookie сеанса в качестве индекса в этом хранилище данных.
- Теперь каждый раз, когда от того же клиента поступает будущий запрос, он будет сопровождаться этим файлом cookie сеанса.
- При каждом входящем запросе сервер может получить значение cookie сеанса, использовать его в качестве ключа для поиска соответствующего объекта сеанса и получить его.
- Затем любой обработчик запроса может прочитать данные из объекта сеанса или записать данные в объект сеанса.
- Таким образом вы можете сохранять данные, связанные с конкретным клиентом, безопасными и безопасными на сервере и использовать их от одного запроса к другому.
Если вы собираетесь реализовать свою собственную систему сеансов, вы должны иметь возможность создавать эти уникальные файлы cookie сеанса и создавать своего рода хранилище сеансов (может быть что угодно, от объекта Map в памяти до базы данных), реализовывать сеанс очистка хранилища по истечении срока действия и сеанса, а затем предоставление соответствующих функций промежуточного программного обеспечения или служебных программ, которые упрощают использование при любом отдельном запросе http.