Socket.io 1.0.5:如何保存会话变量?

Posted

技术标签:

【中文标题】Socket.io 1.0.5:如何保存会话变量?【英文标题】:Socket.io 1.0.5 : How to save session variables? 【发布时间】:2014-08-09 01:16:13 【问题描述】:

不幸的是,socket.io 开发团队决定弃用 set() 和 get() 函数。问题是这两个函数允许我们将变量保存到会话中。

所以我的问题是:socket.io 1.0.5 上的以下代码等效于什么?

socket.set('mySessionVar', 'myValue');

socket.get('mySessionVar', function (error, mySessionVar) 
    console.log('I have a super variable save in the session : '+mySessionVar);
    socket.emit('mySessionVar', mySessionVar);
);

感谢您的帮助, 纪尧姆。

【问题讨论】:

【参考方案1】:

socket.io-handshake 是 socket.io 1.x 的会话中间件。它建立在 express-session 和 cookie-parser 之上。我知道我们在谈论 socket.io 而不是 express,但它仍然适用于 socket.io。此示例将使您的会话在 redis 存储中生效。

var expressSession = require('express-session');
var connectRedis = require('connect-redis')(expressSession);
var cookieParser = require('cookie-parser');
var config =  session:  secret:'secret', key: 'bus.io', store: new connectRedis()  ;
var handshake = require('socket.io-handshake');
var io = require('socket.io')(3000);
io.use(handshake(config.session));
io.on('connection', function (socket) 
  socket.handshake.session.data = "whatever data I want";
  socket.handshake.session.save();
);

【讨论】:

拜托,您能否在您的socket.io-handshake github/npm 中添加可以通过这种方式访问​​会话变量的信息...socket.handshake.session.data。否则很难找到。 我发布了一个新版本 我想将您的答案设置为有效,但我丢失了这个旧帐户。我会赞成你。对不起:/【参考方案2】:

您的“套接字”是一个 javascript 对象,您可以向其中添加任何其他键/值。

socket['mySessionVar'] = 'myValue';
console.log( "I have a super variable save in the session: " + socket['mySessionVar']);

【讨论】:

以上是关于Socket.io 1.0.5:如何保存会话变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问socket.io连接中的会话对象[重复]

如何在客户端中获取 socket.io 客户端的会话 ID

socket.io 身份验证与共享会话数据,io.use() 如何工作

带有快速会话的 ReactJS 和 socket.io - 套接字未使用正确的会话并创建了许多其他会话

Laravel与Socket.io Nodejs共享会话

如何针对跨域的 PHP 会话 ID 对 Socket.IO 进行身份验证