socket.io.session
get/set the same session content with the middleware 'express-session'.
Install
npm install socket.io.session
Config
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var redis = require('redis');
var socketIOSession = require("socket.io.session");
var redisClient = redis.createClient();
var sessionStore = new RedisStore({
"client": redisClient,
"host": "127.0.0.1",
"port": 6379
});
//if you dont wanna use redis as session store
//you can just use "session.MemoryStore"
//memoryStore is binded with express-session as a fallback storage
var sessionSettings = {
"store": sessionStore, // or session.MemoryStore
"secret": "your secret",
"cookie": { "path": '/', "httpOnly": true, "secure": false, "maxAge": null }
};
//used for http session
app.use(session(sessionSettings));
var server = require('http').Server(app);
var io = require('socket.io')(server);
//"sessionSettings" same config as http-session used
var socketSession = socketIOSession(sessionSettings);
//so it's better to make them global avaliable
global.io = io
global.socketSession = socketSession
//parse the "/" namespace
io.use(socketSession.parser);
// define a new namespace
var chat = io
.of("/chat")
.on("connection",function(socket){
console.log(socket.session);//same as http request.session
//change session content
socket.session.login = true
//save the changed session ,at the same time http req.session changed too
socketSession.save(socket)
//or you can destory session that is attached on the specific socket
socketSession.destroy(socket)
//same as "destroy"
socketSession.clear(socket);
});
//parse "/chat" namespace, must use parser for each namespace
chat.use(socketSession.parser);
app.use('/', someRoutes);
server.listen(8080, function() {
console.log('Express server listening on port ' + server. address().port);
console.log('http://localhost:' + server.address().port);
});
Note:
- it's based on express-session
- socket.session == req.session, change one of them, the other one change too
- Email is the best way to let me know about the tool's issue(bjwch2008@gmail.com)