Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将node.js应用程序中的socket.io套接字与web应用程序中的登录用户关联?_Django_Node.js_Session_Web_Socket.io - Fatal编程技术网

Django 如何将node.js应用程序中的socket.io套接字与web应用程序中的登录用户关联?

Django 如何将node.js应用程序中的socket.io套接字与web应用程序中的登录用户关联?,django,node.js,session,web,socket.io,Django,Node.js,Session,Web,Socket.io,我需要将django web应用中的登录用户与其node.js应用中的socket.io套接字相关联,因为对于web的实时部分,我希望使用node.js。会话数据将存储在数据库中。我想我可以在浏览器中访问cookie,这样我就可以将cookie值发送到node.js应用程序,其作用类似于用户标识符,但我认为这不是一个好主意。还有其他方法吗?可以在授权事件中访问cookie。因此,如果您已经在使用cookie存储会话身份验证数据,那么很容易将其集成到socket.io中。有一些预构建的模块可以做这

我需要将django web应用中的登录用户与其node.js应用中的socket.io套接字相关联,因为对于web的实时部分,我希望使用node.js。会话数据将存储在数据库中。我想我可以在浏览器中访问cookie,这样我就可以将cookie值发送到node.js应用程序,其作用类似于用户标识符,但我认为这不是一个好主意。还有其他方法吗?

可以在授权事件中访问cookie。因此,如果您已经在使用cookie存储会话身份验证数据,那么很容易将其集成到socket.io中。有一些预构建的模块可以做这类事情,比如

提供一些关于如何自己做的见解。最重要的部分如下:

var parseCookie = require('connect').utils.parseCookie;

sio.set('authorization', function (data, accept) {
    // check if there's a cookie header
    if (data.headers.cookie) {
        // if there is, parse the cookie
        data.cookie = parseCookie(data.headers.cookie);
        // note that you will need to use the same key to grad the
        // session id, as you specified in the Express setup.
        data.sessionID = data.cookie['express.sid'];
    } else {
       // if there isn't, turn down the connection with a message
       // and leave the function.
       return accept('No cookie transmitted.', false);
    }
    // accept the incoming connection
    accept(null, true);
});

sio.sockets.on('connection', function (socket) {
    console.log('A socket with sessionID ' + socket.handshake.sessionID 
        + ' connected!');
});

当socket.io回退到flash时不会有问题吗?因为我觉得很难分辨flash发送cookies。看起来这只是针对express或connect中间件node.js web框架。我的web框架将是django python或ZendHP。@Krab,上面的代码除了cookie解析器之外,根本不依赖于express或connect。如果需要,您可以编写自己的解析器。这仍然适用于闪存插座。io在抽象AJAX长轮询、flash套接字和web套接字之间的不一致性方面做得非常出色。