Сессия идентифицирует конкретного клиента. Общая идея заключается в том, что объект сеанса и любые данные, которые вы помещаете в объект сеанса, остаются на сервере. Когда пользователь отправляет запрос на ваш сервер, он представляет файл cookie сеанса, который ищет ваша инфраструктура сеанса и выбирает соответствующий объект сеанса. Затем ваши обработчики запросов могут использовать этот объект сеанса и данные, которые вы в него помещаете, для чего угодно.
Данные в объекте сеанса хранятся локально на вашем сервере, поэтому они безопасны и не могут быть испорчены клиентом.
Как использовать их в промежуточном программном обеспечении для проверки пользователя?
Для аутентификации обычно создается некоторое состояние в объекте сеанса, которое представляет, был ли пользователь должным образом аутентифицирован или нет. Если нет, спросите их о полномочиях. Если это так, вы разрешаете выполнение запроса.
Вот некоторый псевдокод для промежуточного программного обеспечения.
app.get("/login", (req, res) => {
// handle login page
res.sendFile("login.html");
});
app.post("/login", (req, res) => {
// check auth credentials from the login form
if (credentials good) {
req.session.authenticated = true;
res.redirect("/someOtherPage.html");
} else {
req.session.authenticated = false;
res.redirect("/login.html");
}
});
// middleware to allow access of already authenticated
app.use((req, res, next) => {
// check if session already authenticated
if (req.session.authenticated) {
next();
} else {
res.redirect("/login.html");
}
});
// route that relies on previous middleware to prove authentication
app.get("/somethingElse", (req, res) => {
// do something for this authenticated route
});
Какая разница между идентификатором сессии и connect.sid?
Файл cookie имеет имя и значение. По умолчанию имя файла cookie для экспресс-сеанса connect.sid
. Значением для cookie является зашифрованный ключ, который экспресс-сеанс использует в качестве индекса в хранилище сеансов.
Идентификатор сеанса является внутренне уникальным идентификатором для каждого объекта сеанса. Он используется во внутренней реализации хранилища сеансов. Вам не нужно беспокоиться о том, что из этого. Они используются внутри для различных хозяйственных целей.
Итак, connect.sid
содержит значение cookie, которое отправляется клиенту и которое клиент передает обратно на сервер. Он специально скрыт шифрованием, и его трудно подделать или угадать, чтобы клиенты не могли угадать значения сеанса. Идентификатор сеанса используется только на сервере и нуждается в таких типах защиты.