How can I get (Express's) sessionID for a websocket connection

express, node.js, websocket

Solution

- 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');
});

Problem

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.)

Original source