【发布时间】: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