2010-11-30 10 views
17

¿Hay alguna forma de pasar fácilmente una cookie de autenticación cuando se establece una conexión WebSocket con socket.io? En este momento tengo que hacerlo por separado, así:¿Cómo enviar cookies cuando se conecta a socket.io a través de WebSockets?

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

Respuesta

24

WebSockets tienen soporte para las galletas ya que están basadas en HTTP, pero echar un vistazo rápido a través de la fuente de Socket.IO revelaron que no hay apoyo para esta construido en.

Por lo tanto, el uso de cookies directamente no es una solución factible en este caso, también, ya que está usando Socket.IO, no se garantiza que los usuarios realmente se conecten a través de un WebSocket.

En el caso de que una conexión utilice un zócalo flash, es muy difícil hacer que Flash envíe las cookies del navegador en lugar de su propio conjunto, por lo que incluso si enviara una cookie directamente, no se configuraría en el navegador en caso de una conexión de socket de matraz.

Actualmente no hay soporte para esto integrado en Socket.IO, por lo que las tomas flash fallarán.

Puede leer sobre eso en this issue, y aquí hay una pregunta sobre el flash cookie problem.

La mejor solución es seguir haciéndolo parte de su propio protocolo.

+4

Solo para futura referencia, este problema ha sido tratado en socket.io versión 0.7 y posteriores. – Chris

+5

¿Cómo se ha solucionado? ¿Puedes aclarar? – Damian

Cuestiones relacionadas