Node.js聊天

我最近设置了一个nodejs聊天服务器,聊天客户端由php服务器提供服务。 当用户登录时,他们的会话将存储在php服务器的mysql中,并且登录cookie将附加到浏览器。

我想限制只有登录用户才能聊天的用户。 实现这个目标的最佳实践是什么?

我的快速思想:

当聊天客户端加载时,如果用户登录,我会通过套接字将登录cookie信息发送到nodejs verver。 然后创建一个nodejs会话。 当用户聊天时,消息连同cookie信息将通过套接字发送到nodejs服务器。 如果cookie信息与nodejs会话不匹配,则消息将不会被广播,客户端套接字将被退出。


websocket是一个永久性的开放连接。 连接到WebSocket时,您只需要验证一次。

只需将您的登录cookie发送给node.js一次,然后通过引用套接字连接将其存储在服务器上。 然后只处理来自已认证用户的消息,并仅向经过认证的用户进行广播。

问题是客户端用户可以很容易地伪造这个cookie,因为节点不会与php通话以确保它是有效的登录cookie。

现在使用一个例子。

警告伪代码

// server.js
everyone.now.joinChat = function(cookie) {
    chat.add(this, cookie);
}

everyone.now.serverMessage = function(message) {
    if (chat.hasUser(this)) {
        chat.broadcast(message);
    }
}

chat = (function() {
    var users = [];

    return {
         "add": function(client) {
             users.push(client);
         },
         "hasUser": function(client) {
             return users.some(function(user) {
                 return user === client;
             });
         },
         "broadcast": function(message) {
              users.each(function(user) {
                  user.clientMessage(message);
              });
         }
    }
}());

// client.js
$(function() {
    now.joinChat($.cookie("login"));

    $("#send").click(function() {
         now.serverMessage($(this).data("message"));
    });

    now.clientMessage = function(message) {
         $("#messages").append($("<span></span>").text(message));
    }

});

这是我正在寻找nodeJS的答案 - 如何使用express创建和读取会话

链接地址: http://www.djcxy.com/p/6481.html

上一篇: Node.js chat

下一篇: Calling a computationally intensive routine from VBA without stalling Excel GUI