Когда вашему веб-приложению необходимо «запомнить» пользователей, оно обычно использует один из двух механизмов: файлы cookie или сеансы. Файл cookie — это небольшая область памяти в браузере, где вы можете хранить данные, связанные с пользователем, такие как, например, настройки поиска. Вместо этого сеансы позволяют хранить конфиденциальную информацию на сервере.

Узнайте, как настроить сеансы на сервере Express на базе Node.js.

Что вам понадобится

Чтобы следовать этому руководству, вам необходимо установить Node.js и npm. Любая недавняя версия Node.js должен прийти с npm, менеджер пакетов для установки зависимостей.

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

Что такое сеанс в Node.js?

Файл cookie — это небольшой файл, который ваш браузер использует для хранения данных.. Вы можете использовать файлы cookie для хранения неконфиденциальных данных, таких как настройки поиска.

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

instagram viewer

Вместо сохранения конфиденциальных данных в виде файла cookie на клиенте их следует хранить на сервере. Это защищает его от внешнего мира.

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

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

Создание сеанса на экспресс-сервере

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

1. Создайте проект Node.js

Создайте новую папку для своего проекта, затем запустите инструмент командной строки и перейдите в эту папку.

Затем выполните следующую команду, чтобы инициализировать проект Node.js:

инициализация npm -y

Это создает файл package.json в корневой папке проекта с настройкой по умолчанию. Файл package.json для запуска npm-скрипты.

2. Установить Express и экспресс-сессию

Вы будете использовать Express для создания приложения веб-сервера. И экспресс-сеанс для создания сеансов в этом серверном приложении.

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

npm я экспресс экспресс-сессия

После установки обоих пакетов следующим шагом будет создание сервера.

3. Создание сессий в приложении

Создайте файл с именем App.js в корневой папке вашего проекта и импортируйте зависимости:

константа экспресс = требовать('выражать')
константа сеанс = требовать('экспресс-сессия')
приложение = экспресс()

Затем зарегистрируйте промежуточное программное обеспечение сеанса. Передайте объект с секрет свойство (для подписи файла cookie sessionID) и файл cookie.

приложение.использовать(
сеанс ({
секрет: "какой-то секрет",
куки: { maxAge: 30000 },
сохранить неинициализированный: ЛОЖЬ,
})
);

Здесь вы устанавливаете максимальный возраст сеанса на 30 секунд (30000 миллисекунды). Установка для saveUnitialized значения false необходима, если у вас есть система входа в систему. Если вы этого не сделаете, ваш сервер будет генерировать новый идентификатор сеанса каждый раз, когда пользователь отправляет запрос.

Затем создайте маршрут входа для изменения сеанса. Когда пользователь попадает на этот маршрут, вы ожидаете, что клиент отправит имя пользователя и пароль в теле запроса. Во-первых, вы получаете доступ к этим значениям и проверяете, существуют ли они (и прошел ли пользователь аутентификацию):

приложение.пост("/авторизоваться", (запрос, разрешение) => {
константа {имя пользователя, пароль} = req.body;

если (имя пользователя Пароль) {
если (req.session.authenticated) {
res.json (сеанс);
} еще {
если (пароль "123") {
req.session.authenticated = истинный;
req.session.user = {имя пользователя};
res.json (рек.сеанс);
} еще {
рез.статус(403).json({ сообщение: "Неверные учетные данные" });
}
}
} еще {
рез.статус(403).json({ сообщение: "Неверные учетные данные" });
}
});

С первым оператором if вы выполняете фиктивную проверку. Эта проверка гарантирует, что вы продолжите работу только при наличии имени пользователя и пароля.

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

С помощью приведенного выше кода сервер запомнит каждого пользователя, отправляющего запрос на сервер. Это связано с тем, что они прошли аутентификацию и сохранили свои уникальные данные (имя пользователя и пароль) в сеансе.

Запустите свой сервер, добавив следующий код внизу App.js:

приложение.слушай(3000, () => {
консоль.бревно("Сервер работает на порту 3000");
});

Чтобы протестировать этот маршрут, используйте клиент API для отправки запроса на созданный вами маршрут входа. Обязательно отправьте логин и пароль в теле запроса. Вот как будет выглядеть ваш запрос API при использовании Rest Client:

ПОСТ http://локальный: 3000/логин HTTP/1.1
Тип содержимого: "приложение/json"
{ имя пользователя: "Кингсли", пароль: "123"}

Если все пойдет хорошо, вы получите следующий объект:

{
"печенье": {
"оригинальныйMaxAge": 30000,
"Только http": истинный,
"путь": "/"
},
"аутентифицированный": истинный,
"пользователь": {
"имя пользователя": "Кингсли",
"пароль": "123"
}
}

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

Сеансы улучшают взаимодействие с пользователем

Сеансы являются жизненно важной частью приложений Node.js. Это связано с тем, что они позволяют поддерживать состояние взаимодействия во многих запросах и ответах. Сеансы особенно важны для приложений, которым требуется вход в систему.

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

Без сеансов вам пришлось бы поддерживать отдельное хранилище данных для каждого пользователя в вашем приложении. Это было бы неэффективно и увеличило бы сложность приложения.

Express.js упрощает сеансы, маршрутизацию и многое другое

Express.js — самый популярный веб-фреймворк Node.js, используемый в настоящее время. Он предоставляет множество инструментов и библиотек для создания бэкэнд-приложений, и библиотека экспресс-сеансов — лишь одна из них.

Если вы хотите использовать Node.js для серверной веб-разработки, попробуйте Express.