Node.js socket.io中的新cookie值不';不行?

Node.js socket.io中的新cookie值不';不行?,node.js,cookies,express,socket.io,everyauth,Node.js,Cookies,Express,Socket.io,Everyauth,我尝试对多个浏览器窗口/页面使用socket.io id。 它是用于SNS身份验证过程使用的,该项目基于 这是我的项目设计: 维护socket.io连接的完整ajax主页。无重新加载、无重定向等 当用户尝试通过某个SNS帐户登录时,会打开一个弹出窗口,该窗口将由everyauth和SNS Auth管理。在弹出窗口中,会发生许多重定向,但主窗口是持久的,因此socket.io连接也是持久的 最后,在成功授权后,everyauth在弹出窗口中重定向“authdone.html” 在浏览器上,此弹出窗

我尝试对多个浏览器窗口/页面使用socket.io id。 它是用于SNS身份验证过程使用的,该项目基于

这是我的项目设计:

维护socket.io连接的完整ajax主页。无重新加载、无重定向等

当用户尝试通过某个SNS帐户登录时,会打开一个弹出窗口,该窗口将由everyauth和SNS Auth管理。在弹出窗口中,会发生许多重定向,但主窗口是持久的,因此socket.io连接也是持久的

最后,在成功授权后,everyauth在弹出窗口中重定向“authdone.html”

在浏览器上,此弹出窗口不再有用,因此window.close()

但是,通过everyauth可以获得成功的登录信息,但在我的情况下,cookie更重要,因为我并不需要使用express framework进行会话管理,因为我打算通过socket.IO进行会话管理

app.get('*',
    function (req, res)
    { 
        console.log("----------get------------");
        console.log(req.url);
        if (req.url == '/public/authdone.html')
        {
            console.log("----------get /public/authdone.html------------");
            console.log(req.cookies);  
            // express(connect) sessionID(sid) cookie available here.
            //{ 'connect.sid': '2DLlayNx90wtTsyeq5w83N9g.Kc1ZFd8I7omf6u4fk4FFyKAt4dP1V6IufSf1ZtRudVI' }
        }
        onreq(req, res);
    });
目前,我通过重定向到登录页(/public/authdone.html)的弹出窗口上的cookie获得了express sessionID,但这还不够我还需要在cookie中获取面向socket.IO的ID。

实际上,我把这里搞糊涂了,问了一个问题。

多亏了Wes,我找到了一种添加新cookie值的方法(在我的例子中,是一些套接字客户端ID),如下所示:

io.configure(function ()
{
    io.set('authorization', function (handshake, callback)
    {
        if (handshake.headers.cookie)
        {
            var cookie = handshake.headers.cookie;
            var newS = ";" 
                + "socketClientID" + "=" 
                + "999999999999999";// eventually randomize for every client
            cookie += newS;
            console.log("=========================================");
            console.log(cookie);  
        } else
        {
            return callback('Cookie not found', false);
        }
        callback(null, true);
    });
});
在这个块中,我添加一个cookie值作为 “socketClientID=999999999999”

因此,通过console.log的当前cookie输出是

connect.sid=fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU;
socketClientID=999999999999999
不过,到目前为止一切都很好,在everyauth重定向页面上, 我还是会

----------get /public/authdone.html------------  
{ 'connect.sid': 'fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU' }
只能通过cookie获取express sessionID(connect.sid),不会反映socket.IO握手阶段添加的clientID cookie值


我真的需要帮助。谢谢。

好的,我发现我需要从客户端配置这种cookie

在('connection',function(client)…上从io.sockets.on发出socketClientID

从客户端发出并回调socketClientID

我用 用于客户端Cookie管理