node.js - 如何获取 websocket 连接的(Express 的)sessionID

标签 node.js websocket express

我在 Express 运行的同一端口上使用 WebSockets npm install ws

我想从刚刚建立并升级到 WebSocket 的 HTTP 连接中获取关联的“sessionID”。

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

如何做到这一点?

(我目前通过在页面中发送 sessionID 来解决这个问题,但这很难看。)

最佳答案

  1. 解析 cookie
  2. 获取 session ID
  3. 获取 session 数据

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

关于node.js - 如何获取 websocket 连接的(Express 的)sessionID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541835/

相关文章:

javascript - Puppeteer Bright Data 代理返回 ERR_NO_SUPPORTED_PROXY 或 CERT 错误

node.js - Gulp-autoprefixer 抛出 ReferenceError : Promise is not defined

javascript - 在js文件中调用Express.js的函数

mysql - Sequelizejs 通过 1 个查询从 2 个 mysql 表中获取结果

javascript - 消息回调很少返回值 - Chrome 扩展

Ajax 与 Socket.io

javascript - Angular,使用express和mySql向客户端显示数据

javascript - 将异步函数传递给 Node.js Express.js 路由器

node.js - Nestjs @SubscribeMessage UnhandledPromiseRejectionWarning : TypeError: this. contextUtils.getContextFactory 不是函数

javascript - 尝试将 $set 与 stringify 一起使用,但它不起作用