【问题标题】:Can't share socket session between express and socket.io无法在 express 和 socket.io 之间共享套接字会话
【发布时间】:2017-08-23 18:30:05
【问题描述】:

我正在尝试与 socket.io 会话共享一个快速会话,但无法从我的快速路由访问保存的会话变量。我正在使用express-socket.io-session 来分享会话。当我在套接字的“连接”事件上保存数据,然后触发路由更改时,express 似乎不知道更改的会话数据。

const path = require('path');

const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const session = require('express-session')({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
});
var sharedsession = require('express-socket.io-session');

app.use(session);

io.use(sharedsession(session, {
    autoSave: true
}))

io.on('connection', (socket) => {

    socket.handshake.session.data = ['connection']
    console.log(socket.handshake.session);

    // First
    socket.on('login', data => {
        socket.handshake.session.data.push('login');
        console.log(socket.handshake.session);
    });
})

// Second
app.get('/route', (req, res, next) => {
    console.log(req.session.data); // => undefined
})

app.get('/*', (req, res, next) => {
    res.sendFile(path.join(__dirname, 'index.html'));
})

server.listen(3000);

我花了很多时间对不同的配置选项进行故障排除,但没有成功。我通过在 repo 中创建一个极小示例来演示问题的最佳方法: https://github.com/matt-mcdaniel/express-socket-test

为什么我无法从我的快速路由中的套接字连接访问保存的数据?

【问题讨论】:

    标签: node.js sockets session express


    【解决方案1】:

    我认为当您像这样从套接字 io 在会话中设置值时,您缺少 .save() 方法 - socket.handshake.session.data = ['连接']; socket.handshake.session.save();

    这应该可行。

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2018-10-02
      • 2014-10-21
      • 2023-03-09
      • 2018-05-02
      相关资源
      最近更新 更多