在与 socket.io 握手 WebSocket 连接时,是否有一种方法可以轻松传递身份验证 cookie?我目前必须单独进行,如下所示:
socket = new io.Socket(document.location.hostname);
socket.addEvent("connect", function()
{
// Send PHP session ID, which will be used to authenticate
var sessid = readCookie("PHPSESSID");
this.send("{'action':'authenticate','sessionid':'"+sessid+"'}");
});
WebSockets 确实支持 cookie,因为它们基于 HTTP,但快速浏览 Socket.IO 的源代码发现不支持这种内置功能。
因此,在这种情况下直接使用 cookies 并不是一个可行的解决方案,而且,由于您使用的是 Socket.IO,因此不能保证用户实际上会通过 WebSocket 进行连接。
在连接使用Flash套接字的情况下,很难让Flash发送浏览器的cookie而不是它自己设置的cookie,因此即使您直接发送cookie,在以下情况下它也不会在浏览器中设置:烧瓶插座连接。
目前 Socket.IO 中不支持此功能,因此闪存套接字将会失败。
您可以在本期中阅读相关内容,这里有一个关于flash cookie问题的问题。
最好的解决方案仍然是使其成为您自己协议的一部分。
您可以让 socket.io 代码调用一些 javascript 并设置 cookie,但想象一下这将是多么不安全。