如何通过WebSockets连接到socket.io时发送cookie?

Luk*_*nis 17 cookies websocket node.js

有没有办法在握手WebSocket连接到socket.io时轻松传递身份验证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+"'}");
});
Run Code Online (Sandbox Code Playgroud)

Ivo*_*zel 24

WebSockets确实支持cookie,因为它们基于HTTP,但是快速浏览Socket.IO的源代码表明不支持这种内置.

因此,在这种情况下直接使用cookie并不是一个可行的解决方案,因为您使用的是Socket.IO,因此无法保证用户实际上会通过WebSocket进行连接.

在连接使用闪存套接字的情况下,很难让Flash发送浏览器的cookie而不是它自己的设置,所以即使你直接发送一个cookie,它也不会在浏览器中被设置为烧瓶插座连接.

目前没有对Socket.IO内置的支持,因此闪存套接字将失败.

您可以在本期中阅读相关内容,这里有关于Flash Cookie问题的问题.

最佳解决方案仍然是使其成为您自己的协议的一部分.

  • 它是如何解决的?你能澄清一下吗? (5认同)
  • 仅供将来参考,已在socket.io 0.7及更高版本中解决此问题. (4认同)