Meteor Session和浏览器刷新

时间:2012-11-14 00:35:03

标签: javascript session meteor

当页面刷新时,Meteor会话会重置吗?

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

如果不是最好的解决方案呢?

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

5 个答案:

答案 0 :(得分: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);
  },
});

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

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

答案 1 :(得分:8)

这是一个老问题,但它是搜索" meteor会话管理器"的第二个问题,所以我认为添加包u2622非常重要:持久性-session完美地解决了这个问题。

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

  

安装

     

meteor add u2622:persistent-session

     

那就是它!现在您可以使用Session.setPersistent来设置会话   刷新后将保存的变量。

     

如果您愿意,您也可以让Session.set执行此操作。见   选项部分。

答案 2 :(得分:4)

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

答案 3 :(得分:1)

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

以下是一些显示他们如何使用它的要点: https://gist.github.com/2865146

答案 4 :(得分:0)

Session是一个全局键值存储,是一个被动的存储。

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

  

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

     

Session的特别之处在于它是被动的。如果从模板内部调用Session.get(“currentList”),则只要调用Session.set(“currentList”,x),模板就会自动重新呈现。

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