gpt4 book ai didi

node.js - 如何防止同一用户在nodejs聊天应用程序中多次登录?

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:42 25 4
gpt4 key购买 nike

我正在使用 Socket.ioExpress 来制作聊天应用程序。

聊天是匿名的,我不想在任何数据库中保存任何内容。我可以考虑检查用户的IP地址并防止从同一IP地址再次登录,但我认为这不是一个好主意,因为人们使用共享的IP地址在线。另一件事是 session ID,但即使用户从浏览器中的不同选项卡登录, session ID 也会发生变化。有没有什么简单的方法可以在不使用任何数据库的情况下做到这一点?最好不安装任何其他包/lib?

最佳答案

express.session 中间件使用基于 cookie 的 session ,默认情况下, session 仅存储在内存中,而不存储在数据库中。如果用户打开新选项卡,基于 cookie 的 session 不会更改。 This article在 SO 的其他地方提到作为使用 socket.io 的快速 session 的一个很好的引用。一般来说,您只需在 socket.io 中授权时检查 session (sio.set('authorization', authCallback)),然后您的应用程序就会让用户连接到正确的房间。

更新:(更具体地了解如何使用 cookie 阻止用户)

// Var to save if the user is connected or not
var connectedUsers = [];

sio.authorization(function(data, next){
var cookie = data.headers.cookie && data.headers.cookie.match(/auth=([^;]+)/);
cookie = cookie && cookie[1] || null;

if (cookie && connectedUsers.indexOf(cookie)){
next(null, false);
}
else {
connectedUsers.push(cookie);
next(null, cookie);
}
});

// Somewhere else
socket.on('disconnect', function (data) {
var cookie = data.headers.cookie && data.headers.cookie.match(/auth=([^;]+)/);
cookie = cookie && cookie[1] || null;

if(cookie) {
connectedUsers.splice(connectedUsers.indexOf(cookie), 1);
}
});

这是获取 cookie 值的非常基本的方法,但它对我有用。请注意,我还没有时间尝试这个解决方案,但原理应该可行。

关于node.js - 如何防止同一用户在nodejs聊天应用程序中多次登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327735/

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