我可以从 Socket.io 访问 cookie 吗?
Posted
技术标签:
【中文标题】我可以从 Socket.io 访问 cookie 吗?【英文标题】:Can I access a cookie from Socket.io? 【发布时间】:2011-06-12 20:36:31 【问题描述】:我想在cookie中设置一些用户信息,并能够在连接时访问它,这可能吗?
【问题讨论】:
【参考方案1】:我明白了,这行得通:
client.request.headers.cookie
【讨论】:
根据这个回复,这将适用于开发,但由于竞争条件而中断生产:***.com/a/4754814/371122【参考方案2】:client.request.headers.cookie
导致竞争条件,因为 cookie 总是指向最后登录的用户。
请看:Socket.IO Authentication。
【讨论】:
有任何证据吗?您提供的链接没有提及。 2016:github.com/socketio/socket.io/issues/2470 最新文档:socket.io/docs/server-api/#namespace-use-fn【参考方案3】:使用 Socket.IO 0.8.7,您可以通过以下方式访问请求标头:
socket.handshake.headers
您可以在https://github.com/LearnBoost/socket.io/wiki/Authorizing找到更多详细信息
【讨论】:
【参考方案4】:查看 engine.io 源代码后,您可以使用以下方法设置 cookie:
var io = require('socket.io')(3000);
io.use((socket, next) =>
socket.conn.transport.once('headers', (headers) =>
headers['set-cookie'] ="sess=test;"; );
next();
);
此代码可能与设置 sid cookie 的 engine.io 代码冲突。 因为 HTTP/1.1 和 HTTP/2 标头都不区分大小写,并且 engine.io 在标头对象中使用“Set-Cookie”添加小写对象名称“set-cookie”可以避免此问题。
【讨论】:
以上是关于我可以从 Socket.io 访问 cookie 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何从服务器向 socket.io 客户端发送 cookie?
node.js + express.js + socket.io 授权:没有cookie
如何对使用 cookie 的 socket.io 中间件进行单元测试