Я использую https://www.npmjs.com/package/express-socket.io-session для синхронизации сеансов между socket.io и express.
Однако, когда я установил сеанс через socket.io (например, с socket.handshake.session.foo
), я не могу получить доступ к нему с помощью экспресс: я получил undefined
с req.session.foo
.
Как я могу это решить? В чем проблема?
Вот: мой код app.js
:NodeJS, Socket IO session и Express session
// Requires
global.config = require("./config.js");
var express = require("express");
var session = require("express-session");
global.sha1 = require("sha1");
global.moment = require("moment");
var rhandler = require("./handler.js");
global.mySQL = require("./mysql.js");
var entities = new require("html-entities").XmlEntities;
global.Users = {};
var app = express();
var server = require("http").createServer(app).listen(config.server.port);
global.Handler = new rhandler();
app.set("view engine", "ejs");
app.use("/assets", express.static("public"));
var socketIO = require("socket.io");
var io = socketIO.listen(server);
var session = require("express-session")({
secret: config.express.secret,
resave: true,
saveUninitialized: true
});
var sharedsession = require("express-socket.io-session");
// Use express-session middleware for express
app.use(session);
// Use shared session middleware for socket.io
// setting autoSave:true
io.use(sharedsession(session, {
autoSave:true
}));
io.sockets.on("connection", function(socket) {
socket.on("login", function(obj, callback) {
socket.handshake.session.test = "test";
});
});
app.get("/", function(req, res) {
console.log(req.session.test);
res.end();
});
Для документа вы должны получить доступ к 'socket.handshake.session.foo', а не' socket.handshake.foo'. – jfriend00
Да, правда, я в своей теме остановился. Но такая же проблема с этим –
Когда я пробовал это в прошлом, для сохранения изменений требовался 'session.save()'. – jfriend00