在Node / Express / Socket.io中销毁会话

时间:2016-07-05 15:51:18

标签: javascript node.js express socket.io

我一直试图绕过这个问题几天,我只是不明白。当我离开网页时,我想杀死我的会话,但我得到的异常(崩溃了服务器)是:

TypeError: Cannot read property 'destroy' of undefined
at Socket.<anonymous> (/home/ubuntu/workspace/server.js:46:20)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at Socket.emit (/home/ubuntu/workspace/node_modules/socket.io/lib/socket.js:128:10)
at Socket.onclose (/home/ubuntu/workspace/node_modules/socket.io/lib/socket.js:425:8)
at Client.onclose (/home/ubuntu/workspace/node_modules/socket.io/lib/client.js:232:24)
at emitTwo (events.js:92:20)
at Socket.emit (events.js:172:7)
at Socket.onClose (/home/ubuntu/workspace/node_modules/socket.io/node_modules/engine.io/lib/socket .js:304:10)
at WebSocket.g (events.js:260:16)

我与断开的连接:

    // create socket.io connection
    io.on('connection', function(socket) {

    if(sess != null) {
        list.push(sess);
    }

    if(list != null) {
        for(var i = 0; i <= list.length; i++) {
            //console.log("User with session id connected: " +sess['sesid']);
            console.log(JSON.stringify(sess['sesid']) + " CONNECTED");
        }
    }

 socket.on('disconnect', function(req){
        req.session.destroy(sess.sesid);
        //destroy session
        console.log('session killed');
    });

任何人都知道如何更容易地做到这一点?我只是将每个新连接添加到我保存sessionID的会话列表中,并在将来添加“用户名”以区分当前在线用户,然后在他们断开连接时删除使用。

1 个答案:

答案 0 :(得分:0)

感谢pay(https://stackoverflow.com/users/1438893/pay)找到这两个方便的帮助链接,我选择使用clientid并从连接的套接字列表中删除它。

Socket.io disconnect client by id

Remove objects on disconnect socket.io