L'ajout d'une valeur de cookie sur le Socket.IO
Comment ajouter une valeur de cookie sur le Socket.IO?
io.sockets.on('connection', function (client)
{
console.log(client.id);
client.handshake.headers.cookie.socketID = client.id; //not work
//client.handshake.headers.cookie("socketID",client.id); //crash
console.log(client.handshake.headers.cookie);
//The current output is:
//connect.sid=tI21xumy3u2n4QXO1GljmPAf.pzFQ1Xu%2B6bz36secu4VSCdSNU8PT1L44gQZ4kFUFQqQ
//this is express session id, and I also want to add client.id of Socket.IO.
//...........
}
J'ai lu
http://www.danielbaulig.de/socket-ioexpress/
mais je n'ai pas besoin de la gestion de session sur node.js mais juste besoin d'ajouter une prise de courant.io ID client de la valeur dans le cookie de connexion.sid n'.
OriginalL'auteur | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à Autorisation avec la Prise.io. C'est là où il gère la demande de connexion initiale, et où vous pouvez définir un en-tête de réponse.
Je ne suis pas sûr si le
cookie(name,value)
abréviation œuvres, mais vous pouvez essayer de régler manuellement:Je voudrais gérer les choses avec du code côté client. C'est à dire: émettre un événement pour le client avec le support ID que les données et le code client enregistrer en bas d'un cookie. Vous pouvez ensuite lire la demande de cookie dans l'autorisation de bloc sur le côté serveur via
handshake.headers.cookie
. Je ne suis pas sûr de savoir pourquoi vous voulez le faire que si, comme le socket.id ne devrait pas être conservé entre les sessions. Lors de la déconnexion c'est sans importance.J'ai suggéré à l'aide de l'autoriser à enregistrer spécifiques au client les données de tous les changements que vous apportez à
handshake.headers
sur l'autorisation sont accessibles dansclient.handshake
dans votre application principale, comme vous le suggérez, ci-dessus. Sans plus d'info sur votre cas d'utilisation, il est difficile de faire plus précis.Comme vous l'avez suggéré, j'ai trouvé ce genre de cookie besoin d'être ajouter à partir du côté client, et cela fonctionne maintenant. Merci. Ajouter cette sur la question ci-dessus la page, trop. Merci beaucoup encore une fois!
cette réponse a été il y a 5 ans, je crois Prise.io changé l'autorisation de rappel à la baisse de la
handshake
prop. Voir la doc. De toute façon, vous devez utiliser le navigateur de Réseau devtools de vérifier la première prise de requête / réponse en-têtes pour voir ce qui se passe avec vos cookies.OriginalL'auteur Wes Johnson
Peut sembler hacky, j'ai essayé toutes sortes de façons de placer un cookie sur la réponse à la poignée de main demande d'obtenir, sans succès. Cependant, j'ai réussi à le faire fonctionner en jouant sur la socket.io prototype code.
Dans le support.io version 1.3.4,
dans \node_modules\socket.io\node_modules\engine.io\lib\server.js
modifier la ligne 249 de :
à
tous les cookies dans la demande sera renvoyé dans la réponse
c'est terrible de conseils. cela ne fonctionne que jusqu'à la prochaine
npm install
.Au moment de la rédaction de ce commentaire, il n'y a pas d'autre solution
La seule façon de le faire est de fourche support.io, et régulièrement patch votre version du projet actif. Alors, je ne le recommande pas, vous ne méritez pas un vote pour proposer un travail de hack.
juste pour le dire. il peut changé le prototype sur le moment de l'exécution. ainsi, il sera presist plus de npm install
OriginalL'auteur JasonY