【发布时间】:2019-09-04 05:07:15
【问题描述】:
当新的 WebSocket 连接来自用户时,我正在尝试从 express-session 获取 sessionID。我能找到 sessionID,我只是对它的格式有疑问。
当我向我的信使页面发出 HTTP 请求时说我得到“X”作为 sessionID,如果我随后建立了 WebSocket 连接,我可以找到会话 ID“AXB”,会话 ID 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', ...) 我得到:
s%3AEIVUudPTckmojrkv6FN9Cdb5NAQq5oQU.AQkvPsfoxieH3EAs8laFWN28dr1C%2B9zIT%2BMXtKTRPBg
但是在app.get('/...', ...) 我得到:
EIVUudPTckmojrkv6FN9Cdb5NAQq5oQU
您会注意到来自 socket.io 的字符串确实包含以下格式的会话 ID:"s%3A" + sessionID + ".xxxxxxxxxxx..."
显然我可以从这里获取 sessionID,但我很好奇为什么当我获得套接字连接时 sessionID 会这样显示?无论浏览器、WebSocket 实现等如何,它总是会这样显示吗?包含的其他信息是什么意思?我主要想确保这是获取 sessionID 的可靠方法。谢谢!
【问题讨论】:
标签: express session cookies socket.io express-session