2010-11-30 4 views
17

Gibt es eine Möglichkeit, ein Authentifizierungs-Cookie beim Handshaking einer WebSocket-Verbindung zu socket.io einfach zu übergeben? Im Moment habe ich es separat zu tun, etwa so:Wie sende ich Cookies, wenn ich mich über WebSockets mit socket.io verbinde?

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+"'}"); 
}); 

Antwort

24

WebSockets haben keine Unterstützung für Cookies, da sie auf HTTP basieren, aber eine schnelle Blättern Sie durch die Quelle von Socket.IO ergab, dass es keine Unterstützung dafür ist, eingebaut.

Die direkte Verwendung von Cookies ist in diesem Fall keine praktikable Lösung, auch wenn Sie Socket.IO verwenden, kann nicht garantiert werden, dass Benutzer tatsächlich über einen WebSocket eine Verbindung herstellen.

Für den Fall, dass eine Verbindung einen Flash-Socket verwendet, ist es wirklich schwierig, Flash die Cookies des Browsers zu senden, anstatt sie selbst zu setzen. Selbst wenn Sie ein Cookie direkt senden würden, würde es im Browser nicht gesetzt werden im Falle einer Flaschensteckverbindung.

Momentan gibt es keine Unterstützung für diese in Socket.IO eingebaute, so dass Flash-Sockets einfach fehlschlagen.

Sie können darüber in this issue lesen, und hier ist eine Frage über die flash cookie problem.

Beste Lösung ist immer noch, es Teil Ihres eigenen Protokolls zu machen.

+4

Dieses Problem wurde in der socket.io Version 0.7 und höher behoben. – Chris

+5

Wie wurde es angesprochen? Könntest Du das erläutern? – Damian

Verwandte Themen