刷新时丢失会话

时间:2018-02-21 23:02:29

标签: node.js socket.io express-session

我遇到了Socket.io的问题。我有一个node.js服务器,它使用READ.ME中的代码 我最初创建它时套接字工作正常,但是当我刷新页面时,客户端的套接字就丢失了。

以下是我服务器上的代码:

'use strict';

const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const bodyParser = require('body-parser');
const messageRoutes = require('./routes/messages');
const db = require('./models');
const session = require("express-session")({
    secret: "my-secret",
    resave: true,
    saveUninitialized: true
});
const sharedsession = require("express-socket.io-session");

app.use(session);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

io.use(sharedsession(session, {
    autoSave: true
}));
io.on('connection', socket => {
    socket.on("login", function (userdata) {
        socket.handshake.session.userdata = userdata;
        socket.handshake.session.save();

        const { username } = userdata;
        const loggedInMessage = {
            message: `${username} has logged in`
        }

        console.log(loggedInMessage.message);
        socket.broadcast.emit('chat message', loggedInMessage);
    });

    socket.on("logout", function (userdata) {
        if (socket.handshake.session.userdata) {
            console.log(`${socket.handshake.session.userdata.username} has disconnected`);
            delete socket.handshake.session.userdata;
            socket.handshake.session.save();
        }
    });
});

// Setting up Routes
app.use("/api/messages", messageRoutes);

http.listen(3001, () => {
    console.log('Listening on port 3001');
});

如您所见,我导入了express-session,然后导入了express-socket.io-session。然后我将sharedsession中间件附加到io实例上。 之后,我为登录和注销事件定义了我的监听器。当新用户登录时,我将他的userdata保存在我的会话对象中并保存。

问题是,当我刷新页面时,套接字丢失了,我无法访问客户端的会话对象。

我该如何解决这个问题?

0 个答案:

没有答案