簡體   English   中英

express-session,在socket.io交互上讀取vars

[英]express-session, read vars on socket.io interaction

我正在使用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');
});

您可以配置套接字授權

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM