流星中的持久会话

时间:2012-07-29 00:55:49

标签: node.js session-state meteor state-machine-workflow user-identification

因此,我一直在观察Meteor的一个比较令人困惑的方面是每次刷新都会清除Sessions。既然它不是持久存储,我会在哪里放置像userid这样的东西,或者人们在我的应用程序的状态机中?

这些情景有哪些模式?

2 个答案:

答案 0 :(得分:9)

实际上你可以做的是创建Session的“子类”,在调用set()时将值存储在Amplify的本地存储中。您将自动继承Session的所有反应属性。这是代码,它对我有用:

SessionAmplify = _.extend({}, Session, {
  keys: _.object(_.map(amplify.store(), function(value, key) {
    return [key, JSON.stringify(value)]
  })),
  set: function (key, value) {
    Session.set.apply(this, arguments);
    amplify.store(key, value);
  },
});

使用SessionAmplify.set / get调用替换所有Session.set / get调用。调用set()时,将调用父Session方法,以及amplify.store()。当首次创建“子类”时,它会加载放在其键中的放大商店中的所有内容,以便可以使用get()立即检索它们。

您可以在此处测试排行榜示例的工作变体:https://github.com/sebastienbarre/meteor-leaderboard

答案 1 :(得分:3)

好吧,首先我会使用meteors built in Auth来存储userID。我认为他们默认使用本地存储,但AFAIK并没有简单的方法可以解决这个问题。

但是,我想如果你想让东西在刷新时存活下来,你应该将它存储在mongo中,或者使用URL来指示它们在状态机中的位置'。您可以使用引导路由器(例如)使用pushState来更改URL。