使用socket.io的websockets无法从cookie中获取connection 's会话id
Unable to get connect's session id from cookie using websockts with socket.io
在配置套接字时。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,我在其他地方看到的可能是问题?我的理解是,删除该选项会增加您对XSS攻击的脆弱性。
谢谢你的帮助!
不熟悉Chrome的特殊行为。然而,很难保证你会得到一个cookie,比如Flash socket,哪个socket。我可以依靠。
但是,您可以通过带套接字的网络手动发送会话id。IO当你连接时,使用类似https://github.com/carhartl/jquery-cookie的东西或只是通过javascript访问cookie(例如document.cookie)。无论运输方式如何,您都可以保证这样做。尝试在客户端禁用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);
}
);
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用socket.io的websockets无法从cookie中获取connection 's会话id