express-session - разница между идентификатором сессии и connect.sid? - PullRequest
0 голосов
/ 23 июня 2019

Какая разница между session id и connect.sid?

Например:

console.log('session id =', req.sessionID)

Результат:

session id = CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q 

И

console.log('req.headers =', req.headers)

Результат:

req.headers = {                                                                                                                                         20:51:34
  host: 'localhost:3000',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' +
    '(KHTML, like Gecko) Chrome/73.0.3683.75 ' +
    'Safari/537.36',
  dnt: '1',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
  cookie: 'connect.sid=s%3ACCw2pSpdPf8NRKLQpFH-nlFztEzps24Q.P04Tx%2FNboFGXvR34HOjpbeh4ogWy58zs%2Bpyde%2FkuUVs',
  'if-none-match': 'W/"2f-u+/xADzzu5HL7bySP/YXVKZBlPc"'
}

CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q отличается от connect.sid

Как использовать их в промежуточном программном обеспечении для проверки пользователя?

1 Ответ

2 голосов
/ 23 июня 2019

Сессия идентифицирует конкретного клиента. Общая идея заключается в том, что объект сеанса и любые данные, которые вы помещаете в объект сеанса, остаются на сервере. Когда пользователь отправляет запрос на ваш сервер, он представляет файл 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, которое отправляется клиенту и которое клиент передает обратно на сервер. Он специально скрыт шифрованием, и его трудно подделать или угадать, чтобы клиенты не могли угадать значения сеанса. Идентификатор сеанса используется только на сервере и нуждается в таких типах защиты.

...