【问题标题】:How to share a session between Express v4 and Socket.io 1.3.2如何在 Express v4 和 Socket.io 1.3.2 之间共享会话
【发布时间】:2015-03-26 18:22:43
【问题描述】:

在过去的几天里,我一直在尝试从 socket.io 共享一个快速会话,但我无法理解它。我将 express 4.11.1 与 socket.io 1.3.2 一起使用(其他依赖项是 express-session 1.10.1、cookie-parser 1.3.3 和 body-parser 1.10.2)。我基本上是将客户端数据从 express 放入会话中,并希望在 socket.io 中使用该信息,因为套接字在重新连接时会丢失信息。我所做的基本上是 here 所做的,但它对我不起作用。

var express = require('express'),
    app = express(),
    session = require('express-session'),
    cookieParser = require('cookie-parser'),
    sessionStore = new session.MemoryStore(),
    bodyParser = require('body-parser');
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;

var sessionMiddleware = session({
  name: 'sid',
  store: sessionStore, // MemoryStore
  secret: 's3cr37',
  saveUninitialized: true,
  resave: true,
});

io.use(function(socket, next) {
  sessionMiddleware(socket.request, socket.request.res, next);
});

app.use(sessionMiddleware);
app.use(bodyParser.json())

server.listen(port, function() {
  console.log('Server listening at port %d', port);
});

app.post('/login', function(req, res){  
  //just storing the info in session
  req.session.username = req.body.user;
  ...
});

io.on('connection', function(socket) {
  //using socket.request.session.username which doesn't work
  ...
});

任何帮助将不胜感激

【问题讨论】:

    标签: javascript node.js express socket.io socket.io-1.0


    【解决方案1】:

    所以,经过一番折腾,我想出了如何从套接字中的会话中获取值。而不是像这样访问会话的值:

    socket.request.session.username
    

    我需要这样做:

    var getUsernameFromSession = function(socket) {
      var sessionId = socket.request.sessionID;
      var cookie = JSON.parse(socket.request.sessionStore.sessions[sessionId]);
      return cookie.username;
    };
    

    我不确定这有多好,但这对我有用。

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2018-10-02
      • 1970-01-01
      • 2018-05-02
      • 2010-10-08
      相关资源
      最近更新 更多