0

我正在使用 express.js 和 socket.io 为网页的客户进行聊天,并且我正在尝试使用 express-session 管理会话,我的问题是,如何读取套接字上的会话值。这是我的代码的一部分。

谢谢您的帮助 :)

var express         = require('express');
var app             = express();
var http            = require('http').Server(app);
var io              = require('socket.io')(http);
var bodyParser      = require('body-parser');
var session         = require('express-session');
var shortid         = require('shortid');

app.use(express.static('public'));
app.use( session({
        secret: 'dont move',
        resave: true,
        saveUninitialized: true
    })
);
app.use( bodyParser.urlencoded({ extended: true }) );
app.post('/chat', function(req, res){
        var sess = req.session;
        sess.ssid = shortid.generate();
        res.render('chat', { name: "name" });
});
io.on('connection', function(socket){
    socket.on('chat message', function( data ){
        if( data.msg.trim() != '' ){
            console.log('message: ' + data.msg);
            //Here I want to read the ssid session var, so I can manage many chats at the same time
        }
    });
    socket.on('disconnect', function(){
        console.log('Hey, someone disconected!');
    });
});
http.listen(3000, function(){
    console.log('listening on *:3000');
});
4

1 回答 1

0

您可以配置套接字授权

var express         = require('express');
var app             = express();
var http            = require('http').Server(app);
var io              = require('socket.io')(http);
var bodyParser      = require('body-parser');
var session         = require('express-session');
var shortid         = require('shortid');

app.use(express.static('public'));
app.use( session({
        secret: 'dont move',
        resave: true,
        saveUninitialized: true
    })
);
app.use( bodyParser.urlencoded({ extended: true }) );
app.post('/chat', function(req, res){
        var sess = req.session;
        sess.ssid = shortid.generate();
        res.render('chat', { name: "name" });
});

var util = require('util';
var connect = require('connect');
var parseSignedCookie = connect.utils.parseSignedCookie;

io.configure(function () {
  io.set('authorization', function (data, callback) {
    if(data.headers.cookie) {
      data.cookie = cookie.parse(data.headers.cookie);
      data.sessionId = parseSignedCookie(data.cookie['ssid'], 'dont move');
    }
    callback(null, true);
  });

  io.on('connection', function(socket) {
    var sessionId    = socket.handshake.sessionId;
    socket.on('chat message', function( data ){
        if( data.msg.trim() != '' ){
            console.log('message: ' + data.msg);
            // NOW YOU CAN USE `sessionId`
        }
    });
    socket.on('disconnect', function(){
        console.log('Hey, someone disconected!');
    });
  });
});

http.listen(3000, function(){
    console.log('listening on *:3000');
});
于 2015-07-23T21:19:24.363 回答