就能通过express v4 express-session 创建MemoryStore
废话不多说, 直接上代码:
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)
{
var name = socket.request.session.username;//原文说这样不行, 但我试过却正常使用
//using socket.request.session.username which doesn't work});
}
如果遇到socket取不到session, 可以这样试一下, 反正我这样是得到undefined的
var getUsernameFromSession = function(socket) {
var sessionId = socket.request.sessionID;
var cookie = JSON.parse(socket.request.sessionStore.sessions[sessionId]);
return cookie.username;
};