没有Express的Socket.io会话
问题描述:
我在node.js中使用socket.io进行websockets(实时聊天),它在live-chat.dev域上运行。没有Express的Socket.io会话
现在我有另一个项目在本地主机上运行,我在那里连接到live-chat.dev(客户端)。
我通过session.id来识别存储在node.js应用程序中的用户。
问题是:每页重新载入都会产生新的session.id。
配置的node.js会议middlware的:
var sessionMiddleWare = session({
secret: 'livechat key',
resave: false,
saveUninitialized: true,
cookie: {
domain : 'localhost'
}
});
io.use(function(socket, next) {
sessionMiddleWare(socket.request, socket.request.res, next);
});
答
我想你在找什么是persistent session
。您可以通过将会话对象存储在任何数据存储中并从中获取它来实现此目的。
如果您对mongodb
感到满意,那么您可以使用connect-mongo
库。
你可以阅读更多关于它在这里https://github.com/jdesboeufs/connect-mongo
但问题是,在不同的主机名运行我的应用程序,这就是为什么插座IO给了我新的会话ID每次。如果我在一台主机上运行两个项目。一切工作正常 – Farkhad
然后,我认为在你的情况下,你将不得不编写一个自定义的中间件,并将两个域作为一个整体来处理。你也可以阅读这个http://*.com/questions/19104292/express-session-with-different-cookie-domain-per-request它可以帮助你。 –
它没有帮助,我认为问题在于localhost项目收到时不会设置coockie。感谢您试图帮助! – Farkhad