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

问题描述 投票:0回答:2

在与 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+"'}");
});
cookies node.js websocket
2个回答
24
投票

WebSockets 确实支持 cookie,因为它们基于 HTTP,但快速浏览 Socket.IO 的源代码发现不支持这种内置功能。

因此,在这种情况下直接使用 cookies 并不是一个可行的解决方案,而且,由于您使用的是 Socket.IO,因此不能保证用户实际上会通过 WebSocket 进行连接。

在连接使用Flash套接字的情况下,很难让Flash发送浏览器的cookie而不是它自己设置的cookie,因此即使您直接发送cookie,在以下情况下它也不会在浏览器中设置:烧瓶插座连接。

目前 Socket.IO 中不支持此功能,因此闪存套接字将会失败。

您可以在本期中阅读相关内容,这里有一个关于flash cookie问题的问题。

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


0
投票

您可以让 socket.io 代码调用一些 javascript 并设置 cookie,但想象一下这将是多么不安全。

© www.soinside.com 2019 - 2024. All rights reserved.