在过去的几天里,我一直在尝试与socket.io共享一个快速会话,我无法绕过它。我正在使用带有socket.io 1.3.2的express 4.11.1(其他依赖项是express-session 1.10.1,cookie-parser 1.3.3和body-parser 1.10.2)。我基本上是将客户端数据放入来自express的会话中,并希望在socket.io中使用该信息,因为套接字在重新连接时会丢失信息。我所做的基本上是做什么here,但它对我不起作用。
var express = require('express'),
app = express(),
session = require('express-session'),
cookieParser = require('cookie-parser'),
sessionStore = new session.MemoryStore(),
bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var sessionMiddleware = session({
name: 'sid',
store: sessionStore, // MemoryStore
secret: 's3cr37',
saveUninitialized: true,
resave: true,
});
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
app.use(sessionMiddleware);
app.use(bodyParser.json())
server.listen(port, function() {
console.log('Server listening at port %d', port);
});
app.post('/login', function(req, res){
//just storing the info in session
req.session.username = req.body.user;
...
});
io.on('connection', function(socket) {
//using socket.request.session.username which doesn't work
...
});
任何帮助都将受到高度赞赏
答案 0 :(得分:0)
所以,经过大量的搞乱之后,我想出了如何从socket中的会话中获取值。而不是像这样访问会话的值:
socket.request.session.username
我需要这样做:
var getUsernameFromSession = function(socket) {
var sessionId = socket.request.sessionID;
var cookie = JSON.parse(socket.request.sessionStore.sessions[sessionId]);
return cookie.username;
};
我不确定这有多好,但这对我有用。