gpt4 book ai didi

javascript - 合并 socket.io 和 express.js session

转载 作者:数据小太阳 更新时间:2023-10-29 04:42:51 25 4
gpt4 key购买 nike

我想将 express.js 和 socket.io session 合并在一起。下面是我的代码(socket.io 部分)

var io = require('socket.io').listen(app);
io.set('log level', 1);

io.sockets.on('connection', function (socket) {
console.log('client connected');
client.send(client.id);//send client id to client itself
socket.on('connect', function(){
console.log(socket.id + ' connected');
});
socket.on('disconnect', function(){
console.log(socket.id + ' disconnected');
});
});

我的 express.js session 设置:

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 时, session 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

最佳答案

您输出的是套接字 ID,而不是 express.js 的 session ID。

您必须使用authorization 事件,它的第一个参数是一个对象,该对象有一个名为sessionID 的条目。该值不应在页面重新加载之间更改,因为它存储在 cookie(或 redis 数据库或其他任何数据库)中。

这里有一篇很好的文章解释了它是如何工作的:http://www.danielbaulig.de/socket-ioexpress/ , 但它有点过时了。基本原理保持不变,但一些细节发生了变化。例如,他创建服务器的方式不再有效,connect 开发人员已删除 parseCookie()。用户是 not happy有了这个决定,但是解决方法是这行易于内存的代码:

connect.utils.parseSignedCookies(cookie.parse(decodeURIComponent(data.headers.cookie)), secret);

正如我所说,上面提到的文章应该给你所有你需要的基础知识,如果你想看到一个有效的实现,看看这个:https://github.com/vortec/lolbr/blob/master/lib/lolbr.js

authorization 事件处理程序中,您可以修改 data 对象并稍后使用 socket.handshake 访问它,在您的情况下: socket.handshake.sessionID.

希望对您有所帮助。

关于javascript - 合并 socket.io 和 express.js session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com