Экспресс-сессии

Как использовать сеансы для идентификации пользователей по запросам

По умолчанию экспресс-запросы являются последовательными, и никакие запросы не могут быть связаны друг с другом. Невозможно узнать, исходит ли этот запрос от клиента, который уже выполнил запрос ранее.

Пользователи не могут быть идентифицированы без использования какого-либо механизма, который делает это возможным.

Вот что такое сеансы.

После реализации каждому пользователю вашего API или веб-сайта будет назначен уникальный сеанс, и это позволит вам сохранить состояние пользователя.

Мы будем использоватьexpress-sessionмодуль, который поддерживается командой Express.

Вы можете установить его, используя

npm install express-session

и как только вы закончите, вы можете создать его экземпляр в своем приложении с помощью

const session = require('express-session')

Это промежуточное ПО, поэтому выустановитьэто в Экспресс с использованием

const express = require('express')
const session = require('express-session')

const app = express() app.use(session({ ‘secret’: ‘343ji43j4n3jn4jk3n’ }))

После этого все запросы к маршрутам приложений теперь используют сеансы.

secret- единственный обязательный параметр, но вы можете использовать гораздо больше. Это должна быть случайная уникальная строка для вашего приложения.

Сеанс прикреплен к запросу, поэтому вы можете получить к нему доступ, используяreq.sessionздесь:

app.get('/', (req, res, next) => {
  // req.session
}

Этот объект можно использовать для получения данных из сеанса, а также для установки данных:

req.session.name = 'Flavio'
console.log(req.session.name) // 'Flavio'

Эти данные сериализуются какJSONпри хранении, поэтому вы можете безопасно использовать вложенные объекты.

Вы можете использовать сеансы для передачи данных промежуточному программному обеспечению, которое выполняется позже, или для их получения позже при последующих запросах.

Где хранятся данные сеанса? Это зависит от того, как вы настроилиexpress-sessionмодуль.

Он может хранить данные сеанса в

  • объем памяти, не предназначенный для производства
  • абаза данныхкак MySQL или Mongo
  • акэш памятикак Redis или Memcached

Существует большой список 3-х пакетов, которые реализуют широкий спектр различных совместимых хранилищ кеширования вhttps://github.com/expressjs/session

Все решения хранят идентификатор сеанса в файле cookie и сохраняют данные на стороне сервера. Клиент получит идентификатор сеанса в файле cookie и будет отправлять его вместе с каждым HTTP-запросом.

Мы будем ссылаться на эту серверную часть, чтобы связать идентификатор сеанса с данными, хранящимися локально.

По умолчанию используется память, она не требует специальной настройки с вашей стороны, это самая простая вещь, но она предназначена только для целей разработки.

Лучший выбор - это кэш памяти, такой как Redis, для которого вам нужно настроить собственную инфраструктуру.

Еще один популярный пакет для управления сеансами в Express -cookie-session, который имеет большое отличие: он хранит данные на стороне клиента в cookie. Я не рекомендую это делать, потому что хранение данных в файлах cookie означает, что они хранятся на стороне клиента и отправляются туда и обратно в каждом отдельном запросе, сделанном пользователем. Он также ограничен по размеру, так как может хранить только 4 килобайта данных. Файлы cookie также должны быть защищены, но по умолчанию это не так, поскольку безопасные файлы cookie возможны на сайтах HTTPS, и вам необходимо настроить их, если у вас есть прокси.

Скачать мою бесплатнуюСправочник Express.js


Дополнительные экспресс-руководства: