【问题标题】:Unable to get connect's session id from cookie using websockts with socket.io无法使用带有 socket.io 的 websockts 从 cookie 中获取连接的会话 ID
【发布时间】:2011-08-11 06:47:23
【问题描述】:

在 socket.io 服务器的配置中,我有以下代码从标头中的 cookie 中获取会话 ID,我想验证会话是否与登录用户相对应(我使用 express 作为 http服务器和一个 MemoryStore 来存储会话)。

  io.set('authorization', function (handshakeData, callback) {
    var cookies = handshakeData.headers.cookie;
    cookies = connect.utils.parseCookie(cookies);
    var sid = cookies['connect.sid'];  
    /* verify that is a valid session */
  });

当我从使用长轮询的 Firefox 连接到我的 node.js 时,这有效,但当我从使用 WebSockets 的 Chrome 连接时失败。它不起作用的原因是当客户端代码连接到套接字时,Chrome 根本不会在标头中发送 cookie。

有没有办法让 Chrome 通过 WebSockets 发送 cookie?

如果不是,我应该如何存储 sessionID 以便在验证套接字连接时可以访问它?

我还应该注意,保存会话 id 的 cookie 设置为 http-only,我在其他地方看到过这可能是问题所在?我的理解是删除该选项会增加您对 XSS 攻击的脆弱性?

感谢您的帮助!

【问题讨论】:

  • 帮自己一个忙,使用nowjs.com
  • @TiansHUo 我正在研究nowjs,谢谢你的提示!你知道我如何在每次连接上找到 connect.sid 吗?

标签: javascript node.js socket.io


【解决方案1】:

不熟悉 Chrome 的这种特殊行为。然而,很难保证你会得到一个带有 Flash 套接字之类的 cookie,socket.io 可能会依赖它。

但是,您可以在连接时使用 socket.io 手动发送会话 ID,使用类似 https://github.com/carhartl/jquery-cookie 的东西,或者只是通过 javascript(例如 document.cookie)简单地访问 cookie。无论运输方式如何,都可以保证您拥有这种方式。

【讨论】:

    【解决方案2】:

    尝试在您的客户端上禁用 Flash 套接字和 Web 套接字:

            var socket = new io.Socket(null, {
                  rememberTransport: false,
                  transports: [
                      //'websocket', 
                      //'flashsocket',
                      'htmlfile',
                      'xhr-multipart',
                      'xhr-polling']
                })
    
            socket.on('connect',
                function() {
                    console.log(arguments);
                }
            );
    
            socket.on('message',
                function(data) {
                    console.log(arguments);
                }
            );
    

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多