I'm using WebSockets npm install ws on the same port as Express is running.
I'd like to pick up the associated 'sessionID' from the HTTP connection which had just been made and upgraded to a WebSocket.
// start express listening
server.listen(conf.server.port, conf.server.host);
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({server: server});
wss.on('connection', function(ws) {
var sessionID = // how do I get this?
ws.on('message', function(message) {
console.log('received: %s', message);
});
ws.send('something');
});
How can this be done?
(I currently work around the issue by sending the sessionID in the page, but this is ugly.)
解决方案Parse cookie
Get session id
Get session data
var express = require('express');
var parseCookie = express.cookieParser();
var MemoryStore = express.session.MemoryStore;
var store = new MemoryStore();
app.configure(function() {
app.use(express.session({ store: store, secret: '123456', key: 'sid' }));
});
wss.on('connection', function(ws) {
parseCookie(ws.upgradeReq, null, function(err) {
var sessionID = ws.upgradeReq.cookies['sid'];
store.get(sessionID, function(err, session) {
// session
});
});
ws.on('message', function(message) {
console.log('received: %s', message);
});
ws.send('something');
});