Я пытаюсь получить 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. Спасибо!