Получение SessionID во время авторизации Socket.io? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь получить sessionID из экспресс-сессии, когда новое соединение WebSocket приходит от пользователя. Я могу найти sessionID, у меня просто вопрос по поводу его формата.

Когда я отправляю HTTP-запрос на свою страницу мессенджера, сообщаю, что я получаю «X» в качестве идентификатора сеанса, если я затем установил соединение WebSocket, я могу найти идентификатор сеанса «AXB», идентификатор сеанса X там, но также в окружении другой информации.

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var session = require('express-session');
var io = require('socket.io')(server);

var store = new MemoryStore({
  checkPeriod: 86400000
});

app.use(session({
  store: store,
  secret: 'jpcs-0001080900DRXPXL',
  saveUninitialized: false,
  resave: true
}));

// ...

app.get('/messenger/:uid', authorizationRedirect, (req, res) => {

  console.log(req.sessionID);
  // prints "EIVUudPTckmojrkv6FN9Cdb5NAQq5oQU"

  // ...
});

io.set('authorization', (data, accept) => {

  if (data && data.headers && data.headers.cookie) {

    console.log(data.headers.cookie);

    cookies_str = data.headers.cookie;
    cookies_arr = cookies_str.split(';');
    cookies = {};

    for (index in cookies_arr) {
      cookie = cookies_arr[index].split('=');
      key = cookie[0].replace(/ /g,'');
      val = cookie[1];
      cookies[key] = val;
    }

    sessionId = cookies['connect.sid'].split('.')[0];
    console.log(sessionId);
    // prints "s%3AEIVUudPTckmojrkv6FN9Cdb5NAQq5oQU.AQkvP..."

    // ...

});

Так что в основном, в io.set('authorization', ...) я получаю:

с% 3A EIVUudPTckmojrkv6FN9Cdb5NAQq5oQU .AQkvPsfoxieH3EAs8laFWN28dr1C% 2B9zIT% 2BMXtKTRPBg

Но в app.get('/...', ...) я получаю:

EIVUudPTckmojrkv6FN9Cdb5NAQq5oQU

Вы можете заметить, что строка из socket.io содержит идентификатор сеанса в следующем формате: "s%3A" + sessionID + ".xxxxxxxxxxx..."

Так что, очевидно, я могу получить сессионный идентификатор отсюда, но мне любопытно, почему сессионный идентификатор отображается так, когда я получаю сокетные соединения? Будет ли оно ВСЕГДА отображаться так независимо от браузера, реализации WebSocket и т. Д.? Что означает другая содержащаяся информация? В основном я хочу убедиться, что это надежный способ получить sessionID. Спасибо!

...