javascript - 在 Meteor 集合中具有一致的客户端 session ID

标签 javascript node.js meteor

当一个新的客户端连接到服务器时,服务器将包含客户端的 Meteor.default_connection._lastSessionId 的记录作为 uuid 字段插入到名为 的集合中事件

然而,每当服务器重置时,客户端都会分配一个新的 Meteor.default_connection._lastSessionId,而包含先前 _lastSessionId 的记录仍保留在集合中。

问题:我们如何检测重连事件,并用新记录更新包含旧 _lastSessionId 的记录?

或者我们能否以某种方式阻止 _lastSessionId 发生变化?

client/main.js

Meteor.startup(function() {
    Meteor.call('active', Meteor.default_connection._lastSessionId)
})

server/main.js

Meteor.methods({
    'active': function(uuid) {
        Active.insert({'uuid': uuid})
    }
})

最佳答案

您无法阻止 lastSessionId 更改,因为服务器需要有现有 session 的记录才能重新连接到它。在热代码重新加载的情况下, session 将被清除,因此它将为客户端分配一个新的 session ID。

您可以做的是将新 session 存储为一个全新的 session ,或者在连接后立即保留第一个 session ID:

Meteor.startup(function() {
   Meteor.onConnection(function() {
      if(Session.equals("session_id", null)) Session.set("session_id", Meteor.default_connection._lastSessionId);
   });
   Meteor.call('active', Session.get("session_id"));
});

所以这应该在客户端上的热代码推送中幸存下来,(因为 Session 变量被保留)。对于服务器有热代码重启的情况,先前的 session_id 将用于将内容插入到您的日志中。

关于javascript - 在 Meteor 集合中具有一致的客户端 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21201883/

相关文章:

javascript - 获取and对象的 'Active'属性

java - 将带有证书和 key 的 NodeJS 请求转换为 Java

node.js - 使用 angular4 将 hash-url 更改为 hash-bang url

javascript - 在 Meteor 中获取被点击的元素?

javascript - 将单个 Node 插入到链表中,在下一个值处给我循环?

javascript - NodeJS "readline"模块不输出提示

javascript - 如何从嵌套钩子(Hook)函数访问数据属性?

双等号 (==) 和三等号 (===) 之间的 JavaScript 性能差异

javascript - 如果用户想要访问需要登录认证的特定页面,如何重定向到 404 页面

javascript - 访问 Meteor 模板中的数组值