【发布时间】:2014-06-01 09:07:43
【问题描述】:
我刚刚在我的流星应用程序中注意到会话变量在页面刷新时被清除。所以
- meteor 如何保存用户登录信息?
- 他们没有保存在会话中吗?
- 如何管理此问题?
【问题讨论】:
我刚刚在我的流星应用程序中注意到会话变量在页面刷新时被清除。所以
【问题讨论】:
这是一个老问题,但由于我发现自己需要同样的东西,所以我就是这样做的。我在设置值时“扩展”了会话以将其实际存储在本地存储中,并在页面加载时将本地存储加载到会话中。
// improving the session package to persist it to the localstorage
Session._set = Session.set;
Session.set = function(key,value) {
Session._set(key,value);
localStorage.setItem(key,JSON.stringify(value));
};
// helper function
function isJSON(str) {
try {
return (JSON.parse(str) && !!str);
} catch (e) {
return false;
}
}
// loading the localstorate on load
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var value = localStorage.getItem(key);
Session._set(key,isJSON(value) ? JSON.parse(value) : value);
}
【讨论】:
Session.set 不使用localStorage? docs.meteor.com/api/session.html 或 blog.meteor.com/… 没有提到它——似乎存储在 localStorage 中的唯一信息是身份验证令牌。如果流星/会话不使用 localStorage 在会话中持久化数据,他们为什么要提供?
Meteor.Session 仅适用于客户端。它是您应用程序中的一个 JavaScript 全局对象。如果您刷新页面,它就会被清除。您的会话存储在客户端 localStorage,https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage。 Meteor 不使用 cookie 进行会话,https://www.meteor.com/blog/2014/03/14/session-cookies。
您需要详细说明您要完成的工作。一旦页面加载完毕,我就使用 Meteor.Session,而不是用于很多事情,但为了获得我的初始状态,我的 URL 包含足够的信息来设置初始状态。
使用 Meteor,您最好不想刷新浏览器。理想情况下,AJAX 和 HTML5 推送状态以及 Meteor 的反应性会发生或应该发生一切。
您应该阅读他们的文档。这是关于 Session 的部分,http://docs.meteor.com/#session
【讨论】: