在Node.js中,如何防止客户端从我的网站打开多个实例

时间:2014-09-08 19:57:30

标签: javascript node.js express

我正在使用node.js语言运行我的服务器,我正在使用快速模块,如何阻止客户端打开我的网站的多个实例

2 个答案:

答案 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中间件,它将会话映射到套接字。如果为用户提供了新的套接字连接,我们将断开另一个套接字,然后创建一个新的套接字/会话映射。