小编rac*_*erp的帖子

使用Express.js v4和Socket.io v1的会话

如何在express.js中保存会话数据并在socket.io事件中访问它?

我正在使用express.js v4,socket.io v1和基本的快速会话中间件开发webapp .

我花了几个小时试图解决这个问题,但Stack Overflow上的所有当前答案仅适用于express v3和socket.io v0.9.不幸的是我不能使用express.io,因为它只是一个使用旧版本的包装器.

我目前的解决方案是完全破解:

app.get('/auth', function(req, res) {
    if(verified(req.query)) {
        authed[req.sessionID] = true;
    }
});

io.sockets.on('connection', function(websocket) {
    var cookies = cookie.parse(websocket.handshake.headers.cookie);
    var decrypted = cookieParser.signedCookies(cookies, random);
    var sessionID = decrypted['connect.sid'];

    websocket.on('input', function(input) {
        if(authed[sessionID]) {
            // Do stuff...
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我将基于会话ID的"会话数据"保存在对象中作为键/值存储.这适用于单个流程应用程序,但它确实不是一个好的解决方案.它实际上并没有让我访问req.session中保存的任何内容,并且如果进程结束,我保存的所有数据都将丢失.

最重要的是,我需要加载第三方cookie包来解析socket.io中的cookie字符串.似乎新版本的cookie-parser消除了它从字符串中解析cookie的功能.至少,它没有记录.

必须有更好的方法!

编辑:最后,我决定使用express redis并在socket.io中编写一个函数,以便根据会话ID从redis获取信息.

javascript session node.js express socket.io

6
推荐指数
1
解决办法
823
查看次数

标签 统计

express ×1

javascript ×1

node.js ×1

session ×1

socket.io ×1