2010-11-30 39 views
17

Existe-t-il un moyen de transmettre facilement un cookie d'authentification lors de l'établissement d'une connexion WebSocket avec socket.io? J'ai actuellement de le faire séparément, comme ceci:Comment envoyer des cookies lors de la connexion à socket.io via 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+"'}"); 
}); 

Répondre

24

WebSockets ne bénéficient d'un soutien pour les cookies car ils sont basés sur HTTP, mais une navigation rapide à travers la source de Socket.IO a révélé qu'il n'y a pas de support pour cette Donc, l'utilisation directe des cookies n'est pas une solution réalisable dans ce cas, étant donné que vous utilisez Socket.IO, il n'est pas garanti que les utilisateurs se connecteront réellement via un WebSocket. Dans le cas où une connexion utilise un socket flash, il est vraiment difficile de faire envoyer les cookies du Browser par Flash au lieu de son propre set, donc même si vous enverriez un cookie directement, il ne serait pas défini dans le Browser dans le cas d'une connexion de prise de ballon.

Actuellement, il n'y a pas de support pour cela intégré dans Socket.IO, donc les sockets flash échoueront juste.

Vous pouvez lire à ce sujet dans this issue, et voici une question sur le flash cookie problem.

La meilleure solution est encore de faire partie de votre propre protocole.

+4

Juste pour référence future, ce problème a été résolu dans socket.io version 0.7 et ultérieure. – Chris

+5

Comment a-t-il été traité? Pouvez-vous clarifier? – Damian