Javascript 合并socket.io和express.js会话
我想将express.js和socket.io会话合并在一起。下面是我的代码(socket.io部分) My express.js会话设置:Javascript 合并socket.io和express.js会话,javascript,session,express,socket.io,Javascript,Session,Express,Socket.io,我想将express.js和socket.io会话合并在一起。下面是我的代码(socket.io部分) My express.js会话设置: app.configure(function() { //app.use(express.logger()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(__dirname + '/static'));
app.configure(function() {
//app.use(express.logger());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/static'));
app.use(express.cookieParser());
app.use(express.session({store: MemStore({
reapInterval: 60000 * 10
}), secret:'foobar', key: 'express.sid'
}));
我的主要问题是在我的终端上,当用户从一个url移动到另一个url时,会话id也会改变:但我不希望它被改变
info - socket.io started
client connected
client connected
4Z0bYHzfWCEFzbbe4WUK disconnected
e_uSvxhSLbLAC9-F4WUL disconnected
client connected
bKDy90gsrWWTRJDD4WUM disconnected
client connected
RJ5qqCL2wfmXbd7U4WUN disconnected
client connected
wjN5Sqx4rucRtWL_4WUO disconnected
您正在从express.js输出套接字ID,而不是会话ID 您必须使用
authorization
事件,它的第一个参数是一个对象,该对象有一个名为sessionID
的条目。该值不应在页面重新加载之间更改,因为它存储在cookie(或redis数据库或其他)中
这里有一篇很好的文章解释了它的工作原理:,但它有点过时。基本原则不变,但一些细节有所改变。例如,他创建服务器的方式不再有效,connect开发人员已经删除了parseCookie()
。用户同意这一决定,但解决办法是这样一行易于记忆的代码:
connect.utils.parseSignedCookies(cookie.parse(decodeURIComponent(data.headers.cookie)), secret);
正如我所说的,上面提到的文章应该为您提供所需的所有基础知识,如果您希望看到一个有效的实现,请查看以下内容:
在授权
事件处理程序中,您可以修改数据
对象,然后使用socket.handshake
,在您的情况下:socket.handshake.sessionID
希望对您有所帮助。@Alex如果您克隆了
lolbr
,请确保在其下方安装了express
。只需克隆,然后将cd
插入其中,然后键入npm install
。这应该行得通。所以,parseSignedCookies现在不可用。您建议如何重新编写代码?我不熟悉socket.io中的Cookies,但我找到了“var Cookies=cookie.parse('foo=bar;cat=meow;dog=ruff');”示例。我应该如何在这个示例中实现它?为什么parseSignedCookies
首先不可用?您的意思是说它在node.js环境中不可用吗?请尝试将connect=require('express/node\u modules/connect')
替换为connect=require('connect')
。现在我正在考虑这个问题。。。。为什么不将cookies的存储和套接字的存储设置为同一个存储?
connect.utils.parseSignedCookies(cookie.parse(decodeURIComponent(data.headers.cookie)), secret);