Socket.io不与快递

时间:2017-10-13 15:23:54

标签: node.js sockets session cookies socket.io

我无法弄清楚为什么会发生这种情况,因为它之前完美无缺。

我正在使用以下库:

"express-socket.io-session": "^1.3.2"
"socket.io": "^2.0.3"
"express": "^4.15.4"
"express-session": "^1.15.5"

1 - 我通过http请求登录用户并将cookie发送回前端。 http上的所有操作都与前端后端交换中的cookie完美配合

2 - 在用户登录后,我告诉前端“确定,用户已登录,现在连接到套接字”:

io ( this.url );

以下是相关代码:

var io_session = require("express-socket.io-session");
var e_session = require("express-session");

var sessionFileStore = require('session-file-store')(e_session);

var ee_session = e_session({
    store: new sessionFileStore({ path: './user_sessions' }),
    secret: "something-random",
    resave: true,
    saveUninitialized: true
});

var enableCORS = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, Authorization, Content-Length, X-Requested-With, *');
    res.header('Access-Control-Allow-Credentials',true);

        // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
        res.sendStatus(200);
    } else {
        next();
    };
};

app.use(function(req, res, next) {      
  ///
   next();
});

//app.use(cookieParser());
app.use(enableCORS);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(ee_session);

preparedApp = require("http").Server(app);

var io = require("socket.io")(preparedApp);

io.use(io_session(e_session,{
    autoSave: true
}));

preparedApp.listen(8080, function(){});

io.on('connection', function(socket){

    var socket_session = socket.handshake.session,
        socket_session_id = socket.handshake.sessionID;

    console.log("SOCKET_SESSION:",socket_session);
    console.log("SOCKET_SESSION_ID:",socket_session_id);

    (...)

3 - socket_session为“空”,但常规http Cookie中的所有内容都有效。会议在那里进行。

我注意到的一件事是socket_session_id指向文件夹user_sessions内的会话文件不存在。唯一存在的是在​​http登录中创建的。所以,基本上:

  

=>用户登录:创建了efihaeif939311kf3f3会话ID文件。

     

=>套接字连接:fiaejgieofaekofek是user_sessions中相同登录流但文件不存在的会话ID(请注意会话ID不相同)

有关为何发生这种情况的任何想法?我完全不知道。

由于

1 个答案:

答案 0 :(得分:0)

尝试通过对会话json进行字符串化并在客户端检索和解析回会话对象来共享会话。

这可能有用。