我可以从 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?

使用 socket.io 解析 cookie

node.js + express.js + socket.io 授权:没有cookie

如何对使用 cookie 的 socket.io 中间件进行单元测试

如何从 socket.io 中访问 req.session 变量?

来自 socket.io 的新 cookie 值不起作用?