我正在使用node.js语言运行我的服务器,我正在使用快速模块,如何阻止客户端打开我的网站的多个实例
答案 0 :(得分:2)
由于大多数服务器端技术无法扩展,因为它们需要您保持状态服务器端,因此我采用客户端方法。您可以使用cookie在窗口之间进行通信,并确保在任何给定时间只有一个客户端“拥有”cookie。也许使用Raft Consensus Algorithm之类的东西来选择哪个窗口是活动窗口,然后让另一个显示“不允许多个会话。”
答案 1 :(得分:1)
这是一种处理方法,确保每次只允许每个用户使用一个经过身份验证的套接字。
var socketSessions = {};
io.use(function(socket, next) {
var request = {
url: socket.request.url,
headers: {
cookie: socket.request.headers.cookie
}
}
cookieParser(request, {}, function(err) {
if(err) {
return next(err);
}
expressSession(sessionSettings)(request, {}, function(err) {
if(err) {
return next(err);
}
socket.session = request.session;
if(socketSessions[request.session.userId]) {
var oldSocket = socketSessions[request.session.userId];
oldSocket.disconnect();
}
socketSessions[request.session.userId] = socket;
next();
});
});
});
上述代码的假设: 你正在使用Express。 你正在使用cookie-parser和express-session。 3.您的身份验证机制创建session.userId
这会创建一个socket.io中间件,它将会话映射到套接字。如果为用户提供了新的套接字连接,我们将断开另一个套接字,然后创建一个新的套接字/会话映射。