Meteor Session 和浏览器刷新
Posted
技术标签:
【中文标题】Meteor Session 和浏览器刷新【英文标题】:Meteor Session and browser refreshes 【发布时间】:2012-11-02 12:09:20 【问题描述】:刷新页面时 Meteor 会话是否会重置?
出于某种原因,我认为他们没有,但似乎他们确实做到了。有没有办法让他们坚持下去?
如果不是,最好的解决方案是什么?
我想让相同的数据显示用户是否刷新(此数据特定于用户),即使他们尚未注册。
【问题讨论】:
我在 Meteor.user 中保存了一些常用数据,当页面刷新时你可以重新设置。 是的,只是我希望即使他们没有登录也能持久化。 【参考方案1】:实际上,您可以做的是创建一个 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
【讨论】:
如果我只想用 amplifyjs 持久化一个键,特别是 Session 的一个键,否则让所有其他键像往常一样运行,我怎么能使用这种技术?有没有办法调整你的方法? 不确定 sebastien.b 是否为同一作者,但确切地说,此代码可作为一个包使用,通过使用 mrt add session-amplify 安装。 github项目在这里:github.com/cramrov/meteor-session-amplify【参考方案2】:这是一个老问题,但它是搜索“流星会话管理器”的第二次点击,所以我认为补充一点很重要,包 u2622:persistent-session 完美地解决了这个问题。
来自以下文档: https://atmospherejs.com/u2622/persistent-session
安装
流星添加 u2622:persistent-session
就是这样!现在您可以使用 Session.setPersistent 设置会话 刷新后保存的变量。
如果您愿意,也可以让 Session.set 执行此操作。见 下面的选项部分。
【讨论】:
感谢这个。它对我有用。我唯一需要在我的代码中更改的是:将 Session.set(.. 更改为 Session.setAuth( ; 和 Session.clearAuth(.. on logout. 这里可能有用的是要注意,在持久会话的引擎盖下,它的放大只是有效!【参考方案3】:我刚刚为 Atmosphere 创建了UserSession 包,它基本上是一个基于用户的持久化Session
。
【讨论】:
为清楚起见,此包将会话变量保存在服务器端集合中。如果您正在寻找会话变量的客户端存储,根据 sebastien.b 的回答,这可以通过 amplify 很好地实现。 好包,但它依赖于 userId,这意味着我们需要一个登录用户。 :(【参考方案4】:所以我认为最好的方法是使用 amplifyJS 包。
这是一些人的要点,显示了他们如何使用它: https://gist.github.com/2865146
【讨论】:
【参考方案5】:Session
是一个全局键值存储,一个反应式存储。
http://docs.meteor.com/#session
Session 在客户端提供了一个全局对象,您可以使用它来存储任意一组键值对。使用它来存储列表中当前选定的项目等内容。
Session 的特别之处在于它是反应式的。如果您从模板内部调用 Session.get("currentList"),则每当调用 Session.set("currentList", x) 时,都会自动重新渲染模板。
如果您必须在客户端中保留某些内容,您可以使用浏览器 localstorage
或者如果您喜欢旧版浏览器,则可以使用 cookie。
【讨论】:
这实际上是 Amplify 包所做的,除了各种后备支持。以上是关于Meteor Session 和浏览器刷新的主要内容,如果未能解决你的问题,请参考以下文章