Рекомендованный способ добиться этого на самом деле (по крайней мере, по моему опыту) - отказаться от функции sessionStore.get
и вместо этого перейти на sessionStore.load
- разница в том, что при загрузке обратный вызов получает экземпляр сеанса вместо необходимостисоздай сам.Разница заключается в том, что вы просто берете свой фрагмент:
sessionStore.get(data.sessionID, function (err, session) {
if (err || !session) {
accept('Error', false);
} else {
// create a session object, passing data as request and our
// just acquired session data
data.session = new Session(data, session);
accept(null, true);
}
});
и меняете его на:
sessionStore.load(data.sessionID, function(err, session) {
if (err || !session) {
accept("Error", false);
} else {
data.session = session;
accept(null, true);
}
});
И оттуда вы сможете получить доступ к сеансу при попытке, например, socket.handshake.session
, однако при работе с сеансом, если вы вносите изменения в событие сокета, вы должны вручную сохранить сеанс.Если вы добавляете / удаляете вещи, которые вы должны: session.save([callback])
.
Я понимаю, что это не очень хороший ответ, поскольку я говорю вам делать примерно то, что вы уже есть, но это работает для меня прямо сейчасс Express 2.5.8
и Socket.IO 0.9.6
.