27

页面刷新时 Meteor 会话是否会重置?

出于某种原因,我认为他们没有这样做,但似乎他们这样做了。有没有办法让他们坚持下去?

如果不是,那么最好的解决方案是什么?

我想允许相同的数据显示用户是否刷新(此数据特定于用户),即使他们尚未注册。

4

5 回答 5

10

实际上,您可以做的是创建 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);
  },
});

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

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

于 2013-02-02T05:54:15.667 回答
8

这是一个老问题,但它是搜索“流星会话管理器”的第二次点击,所以我认为添加包 u2622:persistent-session 完美地解决了这个问题很重要。

来自文档: https ://atmospherejs.com/u2622/persistent-session

安装

流星添加u2622:持久会话

而已!现在,您可以使用 Session.setPersistent 设置刷新后将保存的会话变量。

如果您愿意,您也可以让 Session.set 执行此操作。请参阅下面的选项部分。

于 2015-03-30T21:15:46.947 回答
4

我刚刚为 Atmosphere 创建了UserSession包,它基本上是一个基于用户的持久化Session.

于 2013-08-23T00:31:05.600 回答
1

所以我认为最好的方法是使用 amplifyJS 包。

这是某人的要点,显示了他们如何使用它: https ://gist.github.com/2865146

于 2012-11-14T18:52:00.987 回答
0

Session是一个全局键值存储,一个反应式的。

http://docs.meteor.com/#session

Session 在客户端上提供了一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储列表中当前选定项目之类的内容。

Session 的特别之处在于它是响应式的。如果您从模板内部调用 Session.get("currentList"),则每当调用 Session.set("currentList", x) 时,模板将自动重新呈现。

如果您必须在客户端中保留某些内容,localstorage如果您关心较旧的浏览器,则可以使用浏览器或 cookie。

于 2012-11-14T09:07:32.823 回答