javascript - 使用 Socket.IO 同步 Express Session
问题描述
我面临一个问题,我需要与我的Node.js 服务器以及我的Socket.IO 实例进行通信。这部分有效,但我还需要访问我使用Express创建的会话,即使在Socket.IO 侦听器中也是如此。为此,我正在使用express-socket.io-session。它在技术上有效,但不是我想要的方式。当我对会话进行更改时,我req.session.save(function(err) {})
会确保它确实被保存。我也在socket.handshake.session.save(function(err) {})
Socket.IO监听器中使用。会话已保存,但我注意到虽然可以在侦听器之外按预期访问会话,但在我的任何Socket.IO 侦听器中使用它们这不是……容易吗?它们是不同步的。例如,如果我运行req.session.user = "abc"
,它将undefined
在Socket.IO 侦听器中显示...除非我刷新页面。多亏了这个发现和这里的一些答案,我意识到从客户端断开和连接Socket.IO可以解决这个问题。但我不确定这是否是解决问题的最佳方法。尽管它有效,但在某些情况下,我不能只是一次又一次地断开连接和连接。在另一个......寻找解决方案的会议之后,我socket.handshake.session.reload(function(err) {})
在做任何其他事情之前尝试使用。奇怪的是,我认为它有时确实有效。但即使这是真的,会话undefined
大部分时间都保持该值。我使用以下配置:
var session = require("express-session")({
// ...
resave: false,
saveUninitialized: false
});
我尝试saveUninitialized: true
改用它,它似乎确实同步了会话,但它没有响应用户通过浏览器手动删除其 cookie 的场景。在这种情况下,会话实际上应该显示为undefined
. 它确实......只是不在听众内部。文档还说 usingtrue
已被弃用。
我被这个问题困住了,尽管尽我所能找到解决方案,但我做不到。我可以尝试其他方法吗?
解决方案
推荐阅读
- c++ - 前向声明指向类的 typedef 指针
- javascript - Fabric.JS 复合对象按边界裁剪
- version-control - 如何取消合并 hg/mercurial 中的分支?
- angular - 使用 AngularFireObject 和 switchMap
- c# - WPF RadGridView 默认日期值到空值
- wso2 - WSO2 Datamapper 在邮递员中找不到
- python-3.x - 根据 pytorch 数据集中的文件名拆分数据集
- javascript - MEAN应用程序,在服务器上发布之前我应该更改什么?
- node.js - Node.js:通过变量引用对象的内部属性
- neural-network - Gensim doc2vec 300 维向量输入 keras,lstm 模型不起作用。损失没有减少